我正在尝试构建一个控制台应用程序,它在运行时加载一个实现接口(interface)的程序集。重点是创建一个 .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());
如果有人想查看整个解决方案,可以使用 here .
我可能在这里做错了什么,但我似乎无法找到它是什么。 这是它应该如何使用?或者我应该寻求 MEF 做这样的事情吗?
最佳答案
这让我困惑了一会儿,直到我想起来this thread在 Structuremap 谷歌组中。
当您运行应用程序时,会加载 ComputeInterface.dll 程序集。当您扫描 ComputeLibrary 文件夹时,会再次加载同一个程序集,这会混淆 Structuremap,因为接口(interface)只能从一个程序集实现。尝试从 ComputeLibrary\bin\Debug 文件夹中删除 ComputeInterface.dll,它将起作用。
关于c# - StructureMap: 'AddAllTypesOf' 没有将程序集添加到 ObjectFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270606/