可以說我有一個接口IFileLoader和屬性FileTypeAttributeMEF負載類型屬性
而且我在JPEGLoader與實施IFileLoader [文件(「JPG」)
我可以使用MEF加載類(JPEGLoader)實現IFileLoader和匹配的.jpg的文件擴展名,所以我可以實現以下方法:
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。