.NET MEF加载未引用的.dll

时间:2017-11-11 01:36:42

标签: c# dll mef

我制作了一个3层网络应用程序( web api - > 逻辑 - > DAL )。共享项目包含用于注入层之间依赖关系的所有接口。我使用MEF(反射)将我的图层加载为组件因此,web api项目与其他图层没有任何构建时依赖性!这意味着DLL的(logic.dll + DAL.dll)将不会出现在web api的/ bin文件夹中 - 因此MEF将无法找到并加载我的dll。

如果我只是在解决方案中的项目之间添加一个(未使用的)引用,那么一切都有效 - 但是我对这种依赖没有意义......使用MEF组件的全部目的是将所有内容分离并通过接口进行通信。 : - )

1 个答案:

答案 0 :(得分:0)

您可以使用 DirectoryCatalog 执行此类任务。这是一个例子:

 var dirPath = @"Z:\MyAssemblies";
 var registration = new RegistrationBuilder();
 registration.ForTypesMatching(t => typeof(IFoo).IsAssignableFrom(t))
      .Export<IFoo>();
 var dirCatalog = new DirectoryCatalog(dirPath,registration);
 var container = new CompositionContainer(dirCatalog);

正如您所看到的那样,它将作为参数接收到dll所在目录的完整路径。然后它扫描它并做已知的MEF东西..

通过这种方式,您可以按照自己的意愿去除所有内容。