C# 仅从MEF导入多个元数据
我有一个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))
[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导入,所以它不考虑这里的共享属性。如果您可以打开值并通过两个不同的参数传递它们,这能解决你的问题吗?如果是这样,您可以在下面的答案中添加详细信息并结束此问题。