MEF 延迟加载?

Pat*_*ier 2 .net c# import mef lazy-loading

看看这个代码:

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;}
}
...
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点 ?

我试图把:

 [import]
  Lazy<Interace2> Object2 {get;set;}
Run Code Online (Sandbox Code Playgroud)

但我仍然有同样的麻烦。

Dan*_*ted 5

用这个:

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

AllowDefault 将允许在没有 Interface2 时组合成功,而 AllowRecomposition 将允许您稍后添加它。是否使用 type 属性Lazy<Interface2>或仅Interface2在这种情况下使用都无关紧要。