我有一个MEF的自定义元数据,声明如下
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)]
public class ModuleAttribute : ExportAttribute ,IModuleMetadata
{
public ModuleAttribute(string contract)
: base(typeof(IScreen))
{
Name = contract;
Region = Regions.Sidebar;
IsVisible = true;
}
public string Name { get; set; }
public string Module { get; set; }
public Regions Region { get; set; }
public string DisplayName { get; set; }
public bool IsVisible { get; set; }
public string Description { get; set; }
public short Order { get; set; }
public short Permissions { get; set; }
}
截至目前,我使用ImportingConstructor
private readonly IEnumerable<Lazy<IScreen, IModuleMetadata>> _modules;
[ImportingConstructor]
public SidebarViewModel([ImportMany] IEnumerable<Lazy<IScreen, IModuleMetadata>> modules)
{
_modules= modules;
}
这使用Lazy&lt;&gt;给我了对象和元数据。
这里的问题是,我使用MEF导出的所有类都是NonShared
,我想每次都创建一个新对象。但是LazyObject.Value每次都给我相同的实例。
在MEF中是否存在一种方法,我只能导入所有元数据,然后使用ExportProvider,我可以获得新的ViewModal对象。