看看这段代码:
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;}
但我仍然遇到同样的麻烦。
答案 0 :(得分:4)
使用此:
[Import(AllowDefault=true, AllowRecomposition=true)]
Lazy<Interface2> Object2 {get;set;}
当没有Interface2时,AllowDefault将允许合成成功,而AllowRecomposition将允许您稍后添加它。在这种情况下,如果使用Lazy<Interface2>
类型或Interface2
类型的属性,则无关紧要。