我有一个MEF作文问题。在我的开发环境中,我可以使用此代码导入部件。
var dirCatalog = new DirectoryCatalog(path, "MyCompany.*.dll");
var container = new CompositionContainer(dirCatalog);
container.SatisfyImportsOnce(this);
但是当我部署到不起作用的测试服务器时。我发现使其正常工作的唯一方法是显式加载具有如下导出的dll:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Modelling.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.AppServer.Dispatchers.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Service.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentService.Proxy.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentPropertyService.Proxy.dll"))));
var container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this);
显然,我真的不想明确加载每个有导出的dll;那种方式违背了MEF的目的。但是,现在这是我发现的唯一有效的方法。
此代码位于自定义服务主机工厂中,用于启动IIS中托管的WCF服务。不确定那很重要......
TIA, 格雷格
答案 0 :(得分:0)
为什么不将 DLL文件名放在 XML 或其他配置文件中。至少你不必重新编译。
我建议至少......
文件名和 IsEnabled ,这样您就可以切换IsEnabled而不必在XML文件中发表评论。