2010-06-24 214 views
2

这段代码看看:延迟加载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;} 
} 
... 

我想延迟加载对象2 beween计划和主要组成后。当我在程序中编写时,我有一个MEF错误,因为MEF也尝试编写Object2(但开始时Interface2的实现不可用...我想在它之后加载它)。

我该怎么做?

我试图把:

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

,但我仍然有同样的烦恼。

回答

4

使用此:

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

AllowDefault将使成分成功时,有没有接口2,和AllowRecomposition将允许您以后添加。在这种情况下,使用类型为Lazy<Interface2>的财产或仅使用Interface2无关紧要。