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