使用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
:
“lazily-initialized类型没有公共的无参数构造函数。”
问:如何为Lazy<T, U>
变量分配T
实例(实现U
)?
答案 0 :(得分:2)
答案 1 :(得分:0)
我知道它被称为懒惰,但你至少可以read the docs! :)
o.Item = new Lazy<MyItem>(InitFunction);
答案 2 :(得分:0)