作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚开始使用托管可扩展性框架。我有一个导出的类和一个导入语句:
[Export(typeof(IMapViewModel))]
[ExportMetadata("ID",1)]
public class MapViewModel : ViewModelBase, IMapViewModel
{
}
[ImportMany(typeof(IMapViewModel))]
private IEnumerable<IMapViewModel> maps;
private void InitMapView()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(ZoneDetailsViewModel).Assembly));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
foreach (IMapViewModel item in maps)
{
MapView = (MapViewModel)item;
}
}
这很好用。 IEnumerable 获取导出的类。不,我尝试将其更改为使用惰性列表并包含元数据,以便我可以过滤出我需要的类(与以前相同的导出)
[ImportMany(typeof(IMapViewModel))]
private IEnumerable<Lazy<IMapViewModel,IMapMetaData>> maps;
private void InitMapView()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(ZoneDetailsViewModel).Assembly));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
foreach (Lazy<IMapViewModel,IMapMetaData> item in maps)
{
MapView = (MapViewModel)item.Value;
}
}
在此之后,Ienumerable 没有任何元素。我怀疑我在某处犯了一个明显而愚蠢的错误..
最佳答案
它可能不匹配,因为您的元数据接口(interface)与导出的元数据不匹配。为了匹配您显示的示例导出,您的元数据界面应如下所示:
public interface IMapMetaData
{
int ID { get; }
}
关于c# - 具有 ImportMany 和 ExportMetadata 的 MEF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909067/
我在我的类上设置了以下 ExportMetaData 属性: [Export(typeof(IDocumentViewer))] [ExportMetadata("Name", "MyView
我刚刚开始使用托管可扩展性框架。我有一个导出的类和一个导入语句: [Export(typeof(IMapViewModel))] [ExportMetadata("ID",1)] public cla
我是一名优秀的程序员,十分优秀!