【发布时间】:2014-05-13 11:12:19
【问题描述】:
假设我有一个接口 IFileLoader 和属性 FileTypeAttribute
我在 JPEGLoader 中使用 [FileType(".jpg")] 实现 IFileLoader
我可以使用 MEF 加载实现 IFileLoader 并匹配 .jpg 作为文件扩展名的类(JPEGLoader),以便我可以实现以下方法:
public void IFileLoader GetLoader(string filename);
这可以用 MEF 完成,还是我应该坚持这个:
var allTypes = assemblies.SelectMany(a => a.GetTypes());
var classes = allTypes.Where(t => t.IsClass && ! t.IsAbstract);
var fileLoaders = classes.where(t => typeof(IFileLoader).IsAssignableFrom(t));
var forType = fileLoaders.Where(t => t.GetAtributeValue<FileTypeAttribute,string>(t => t.FileType, string.Empty) == fileType);
var loaderInstances = fileLoaders.Select(t => Activator.CreateInstance(t) as IFileLoader);
或者上述至少变成了 ILookup,或者可能是我没有考虑过的其他东西?
我希望能够在项目的不同程序集中甚至在插件程序集中实现 IFileLoader。
【问题讨论】:
标签: c# .net reflection mef