使用MEF延迟加载?

时间:2010-06-24 09:49:01

标签: c# .net import lazy-loading 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;}
}
...

我希望在Program和Main之间的组合之后延迟加载Object2。当我在Program中编写时,我有一个MEF错误,因为MEF也尝试编写Object2(但是Interface2的实现在开始时是不可用的......我想在之后加载它。)

我该怎么做?

我试图把:

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

但我仍然遇到同样的麻烦。

1 个答案:

答案 0 :(得分:4)

使用此:

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

当没有Interface2时,AllowDefault将允许合成成功,而AllowRecomposition将允许您稍后添加它。在这种情况下,如果使用Lazy<Interface2>类型或Interface2类型的属性,则无关紧要。