【问题标题】:StructureMap: 'AddAllTypesOf' not adding assembly to ObjectFactory?StructureMap:“AddAllTypesOf”未将程序集添加到 ObjectFactory?
【发布时间】:2013-03-07 11:57:18
【问题描述】:

我正在尝试构建一个控制台应用程序,该应用程序在运行时加载一个实现接口的程序集。重点是创建一个 .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 做这样的事情吗?

【问题讨论】:

  • 根据文档,您的代码似乎符合预期。您已经在调试器中使用断点运行了它,并在 scanner.AssembliesFromPath(dir); 行执行后验证了扫描程序实例具有预期的程序集?
  • 是的,运行该行后,扫描仪包含 2 个程序集:接口和库,而在此之前,有 0 个。screenshot
  • 如果删除.NameBy 会发生什么?我想知道是否可能有一个异常被吞下,阻止类被添加到扫描仪中。
  • 删除该部分似乎没有任何改变。

标签: c# structuremap .net-assembly


【解决方案1】:

这让我困惑了一段时间,直到我想起了 Structuremap google 组中的this thread

当您运行应用程序时,会加载 ComputeInterface.dll 程序集。当您扫描 ComputeLibrary 文件夹时,会再次加载相同的程序集,这会混淆 Structuremap,因为该接口只能从一个程序集实现。尝试从 ComputeLibrary\bin\Debug 文件夹中删除 ComputeInterface.dll 即可。

【讨论】:

  • 谢谢,删除接口 dll 确实解决了问题。我永远不会想出这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
相关资源
最近更新 更多