2010-11-30 7 views
3

J'ai l'exception CompositionException avec ce message: "La ComposablePart de type 'SomeService' ne peut pas être recomposée car elle est dans un état invalide, elle ne peut être recomposée que si elle a déjà été entièrement prévisualisée ou composée."MEF CompositionException

Exception est lancée par ce code:

public class SomeService : ISomeService 
{  
    [Import(typeof(ISomeType))] 
    public ISomeType SomeType { get; set; } 

    public SomeService() 
    { 
     Container.ComposeParts(this); 
    } 
} 

mais tout va bien avec ceci:

public class SomeService : ISomeService 
{  
    [Import(typeof(ISomeType))] 
    public ISomeType SomeType { get; set; } 

    public SomeService() 
    { 
     this.SomeType = Container.GetExportedValue<ISomeType>(); 
    } 
} 

J'ai ce code "Container.ComposeParts (this)" dans d'autres endroits et il fonctionne, mais ici ce n'est pas le cas.

Je n'ai rien trouvé d'intéressant après avoir recherché sur Google "ne peut pas être recomposé car il est dans un état invalide".

Que signifie ce message? Merci!

Répondre

1

Cela peut être dû au fait que vous utilisez CompositionContainer à partir de plusieurs threads. Es-tu diong ça?

+0

Peut-être avez-vous raison. J'héberge un service wcf avec le service Windows. Les deux services utilisent une instance de Container. Je vais essayer de régler ça plus tard. Pour l'instant, Container.GetExportedValue est suffisant. – Serhiy

+0

Si c'est le cas, assurez-vous que le conteneur est créé avec isThreadSafe = true – hammett