使用T </t,>的某个实例分配Lazy <t,tmetadata =“”>

时间:2013-01-09 08:31:50

标签: c# mef lazy-evaluation

使用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)?

3 个答案:

答案 0 :(得分:2)

或者:

Item = new Lazy<Foo>
(
    ()=> 
    { 
        Foo fobj = new Foo() { ID = 99 }; 
        return fobj; 
    }
 );

Source

答案 1 :(得分:0)

我知道它被称为懒惰,但你至少可以read the docs! :)

o.Item = new Lazy<MyItem>(InitFunction);

答案 2 :(得分:0)