MEF Lazy ImportMany with Creationpolicy.NonShared

bli*_*eis 1 c# mef lazy-evaluation

我是mef的初学者,所以我有一个问题:)我有以下内容:

[PartCreationPolicy(CreationPolicy.Shared)]
[Export(typeof(SharedExport))]
public class SharedExport : INPCBase
{
    [ImportMany(typeof(INonShared),RequiredCreationPolicy = CreationPolicy.NonShared)]
    private IEnumerable<Lazy<INonShared,Dictionary<string,object>>> fac;

    ...

    public void Open()
    {
        foreach (var lazy in fac)
        {
            this.Muster.Add(lazy.Value);
        }

    }
Run Code Online (Sandbox Code Playgroud)

导入的所有类都标记为非共享.

[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(INonShared))]
[ExportMetadata("Muster","030")]
public sealed class NonShared1 : INPCBase, INonShared
{
    public NonShared1()
    {
        Debug.WriteLine("ctor NonShared1" + this.GetHashCode().ToString());
    }

    #region Implementation of INonShared

    public string Displayname
    {
        get { return "Muster 030 "+ this.GetHashCode().ToString(); 
        }
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题:当Open()执行时,是否应该始终创建一个新的NonShared1实例?我总是一样的.

Wes*_*ard 9

马修是正确的关于共享/非共享方面只影响在每次导入给出的实例,你就不会在每次你拉Lazy.Value时间得到一个新的实例.如果您想要的是每次获取一个新实例并进行处理,您可能会考虑使用ExportFactory.目前ExportFactory只存在于MEF的Silverlight的版本,但有是将功能添加MEF的桌面版本,如果你真的需要这个功能上mef.codeplex.com一个样本项目.