gpt4 book ai didi

c# - MEF Lazy ImportMany 与 Creationpolicy.NonShared

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:25 25 4
gpt4 key购买 nike

我是 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);
}

}

导入的类都标记为非共享。

[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
}

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

最佳答案

Matthew 是正确的,Shared/NonShared 方面只影响每次导入时给定的实例,每次拉动 Lazy.Value 时都不会获得新实例。如果您想要的是每次都获取一个新实例并处理它,您可能会考虑使用 ExportFactory。目前 ExportFactory 仅存在于 MEF 的 Silverlight 版本中,但如果您确实需要此功能,mef.codeplex.com 上有一个示例项目可将此功能添加到 MEF 的桌面版本。

关于c# - MEF Lazy ImportMany 与 Creationpolicy.NonShared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com