2010-06-24 8 views
2

Jetez un oeil à ce code:Charge paresseuse avec MEF?

public class Program 
{ 
[import]IMain Main {get; set;} 
... 
private Compose() {...} 
} 

internal interface IMain 
{ 
... 
} 

[Export(typeof(IMain)] 
public class Main : IMain 
{ 
    [import] 
    Interace1 Object1 {get;set;} 

    [import] 
    Interace2 Object2 {get;set;} 
} 
... 

Je veux charge paresseux Object2 après la composition beween programme et Main. Quand je compose dans Program, j'ai une erreur MEF parce que MEF essaye aussi de composer Object2 (mais l'implémentation d'Interface2 n'est pas disponible au début ... Je veux le charger après).

Comment est-ce que je peux faire ceci?

J'ai essayé de mettre:

[import] 
    Lazy<Interace2> Object2 {get;set;} 

mais j'ai toujours le même problème.

Répondre

4

Utilisez ceci:

[Import(AllowDefault=true, AllowRecomposition=true)] 
Lazy<Interface2> Object2 {get;set;} 

AllowDefault permettra la composition de réussir quand il n'y a pas Interface2, et AllowRecomposition vous permettra d'ajouter plus tard. Ce n'est pas grave si vous utilisez une propriété de type Lazy<Interface2> ou simplement Interface2 dans ce cas.

Questions connexes