我可以编写一个类来使用mef导入实现特定接口的所有类型,然后在运行时指定此接口。 (我知道我需要用导出来标记实现者)
使用示例:
IEnumerable<IExcitingClass> excitingClasses = ClassImporter<IExcitingInterface>.ImportAllFrom(specifyDirectory);
这可能吗?
答案 0 :(得分:1)
您可以使用DirectoryCatalog创建容器,然后调用container.GetExportedValues<IExcitingClass>
。这就是你想要的吗?
答案 1 :(得分:1)
在运行时,您只能使用字符串来指定您的界面。
public IEnumerable<object> GetAllInheritors(string interfaceName)
{
Assembly assembly = this.GetType().Assembly;
foreach (var part in Container.Catalog.Parts)
{
Type type = assembly.GetType(part.ToString());
if (type != null)
if (type.GetInterface(interfaceName) != null)
{
yield return part.CreatePart().GetExportedValue(part.ExportDefinitions.First());
}
}
}