MEF组成导入问题

时间:2011-12-07 20:48:45

标签: mef

我有一个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, 格雷格

1 个答案:

答案 0 :(得分:0)

为什么不将 DLL文件名放在 XML 或其他配置文件中。至少你不必重新编译。

我建议至少......

文件名 IsEnabled ,这样您就可以切换IsEnabled而不必在XML文件中发表评论。