StructureMap: & # 39; AddAllTypesOf& # 39;不向ObjectFactory添加程
本文关键字:添加 ObjectFactory AddAllTypesOf StructureMap 不向 | 更新日期: 2023-09-27 18:02:48
我正在尝试构建一个控制台应用程序,在运行时加载实现接口的程序集。关键是要创建一个带有指令的.dll,这些指令可以通过更改.dll来更改。
我的VS2012解决方案存在3个项目:接口,实现它的库和控制台应用程序。(正因为如此,这三个都有自己的命名空间,也许这是一个问题?)库和控制台应用程序都引用了接口项目。
将程序集添加到ObjectFactory
后,在使用GetAllInstances
时找不到它们。它们是在使用AssembliesFromPath
时发现的,但添加似乎不起作用。
下面是我的代码:
var dir = "..''..''..''ComputeLibrary''bin''Debug";
ObjectFactory.Initialize(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssembliesFromPath(dir);
scanner.AddAllTypesOf(typeof(ICompute)).NameBy(i => i.Name);
});
});
var list = ObjectFactory.GetAllInstances<ICompute>().ToList();
list.ForEach(item => item.Test());
如果有人想看完整的解决方案,可以在这里找到。
我可能在这里做错了什么,但我似乎找不到它是什么。这东西就该这么用吗?或者我应该期待MEF做这样的事情?
这让我困惑了一段时间,直到我在Structuremap google组中想起了这个线程。
运行应用程序时,将加载ComputeInterface.dll程序集。当您扫描computellibrary文件夹时,会再次加载相同的程序集,这会使Structuremap感到困惑,因为接口只能从一个程序集实现。尝试从computellibrary 'bin'Debug文件夹中删除ComputeInterface.dll,它将工作。