我制作了一个3层网络应用程序( web api - > 逻辑 - > DAL )。共享项目包含用于注入层之间依赖关系的所有接口。我使用MEF(反射)将我的图层加载为组件因此,web api项目与其他图层没有任何构建时依赖性!这意味着DLL的(logic.dll + DAL.dll)将不会出现在web api的/ bin文件夹中 - 因此MEF将无法找到并加载我的dll。
如果我只是在解决方案中的项目之间添加一个(未使用的)引用,那么一切都有效 - 但是我对这种依赖没有意义......使用MEF组件的全部目的是将所有内容分离并通过接口进行通信。 : - )
答案 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东西..
通过这种方式,您可以按照自己的意愿去除所有内容。