使用 C# 4,您可以对 MEF 使用延迟初始化。请参阅http://msdn.microsoft.com/en-us/library/dd986615.aspx
// So I have this member, populated through MEF.
private Lazy<MyItem, ISomeInterface> item;
public Lazy<MyItem, ISomeInterface> Item
{
get
{
return item;
}
set
{
item = value;
}
}
现在,如果我有一个MyItem
想要分配给这个惰性成员变量的实例怎么办?这不起作用:
var myItem = new MyItem(); // Implements ISomeInterface
o.Item = myItem; // Cannot convert type...
更新:我简化了我的样本有点太多了。这里的问题是我有惰性评估项目(来自MEF
插件管理器)Lazy<MyItem, ISomeInterface>
。有时这些项目已经实例化,它要求如下构造:
var item = new Lazy<MyItem, ISomeInterface>(obj);
但是,这会导致MissingMemberException
:
“延迟初始化的类型没有公共的、无参数的构造函数。”
问:如何分配具有(that implements )Lazy<T, U>
的实例的变量?T
U