C# 仅从MEF导入多个元数据

C# 仅从MEF导入多个元数据,c#,mvvm,mef,caliburn.micro,C#,Mvvm,Mef,Caliburn.micro,我有一个MEF的自定义元数据,声明如下 [MetadataAttribute] [AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)] public class ModuleAttribute : ExportAttribute ,IModuleMetadata { public ModuleAttribute(string contract) : base(typeof(IScreen))

我有一个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;            
}
专用只读IEnumerable\u模块;
[导入构造函数]
public SidebarViewModel([ImportMany]IEnumerable模块)
{
_模块=模块;
}
这为我提供了使用Lazy的对象和元数据。 这里的问题是,我使用MEF导出的所有类都是
非共享的
,我希望每次都创建一个新对象。但是LazyObject.Value每次都给我相同的实例


在MEF中是否有一种方法,我只能导入所有元数据,然后使用ExportProvider,我可以获得新的ViewModal对象。

惰性缓存单个值。你想把它拿走吗?如果可能的话,不确定……您能否给出一个代码示例,在其中您实际调用
Value
以获取实例?您是否正在评估元数据以查看要实例化哪个模块?问题是如@ Wrar所提到的,因为我们从惰性中得到了值,每次都会发送相同的值,而不是从MEF导入,所以它不考虑这里的共享属性。如果您可以打开值并通过两个不同的参数传递它们,这能解决你的问题吗?如果是这样,您可以在下面的答案中添加详细信息并结束此问题。