ImportMany仅来自MEF的元数据

时间:2015-03-26 13:45:09

标签: c# mvvm mef caliburn.micro

我有一个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对象。

0 个答案:

没有答案