0

使用 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>的实例的变量?TU

4

3 回答 3

2

或者:

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

资源

于 2013-01-09T08:37:07.100 回答
0

我知道它叫做 Lazy 但你至少可以阅读文档!:)

o.Item = new Lazy<MyItem>(InitFunction);
于 2013-01-09T08:35:27.900 回答
0

解决方案是使用使用的ToLazy方法MEFhttps ://mefcontrib.svn.codeplex.com/svn/trunk/src/MefContrib.Models.Provider/ComposableMember.cs

于 2013-01-09T09:56:33.510 回答