c# - StructureMap: 'AddAllTypesOf' 没有将程序集添加到 ObjectFactory?

标签 c# structuremap .net-assembly

我正在尝试构建一个控制台应用程序,它在运行时加载一个实现接口(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/

相关文章:

c# - 将角色组合在一起并将用户分配给一个组(ASP.NET 角色提供程序)

c# - 如何本地化 asp.net mvc 3 应用程序

structuremap - 您可以使用结构图将依赖项注入(inject) postsharp 属性吗

c# - StructureMap:如何按类型而不是名称指定 Ctor 参数

c# - ResolveEventHandler只调用一次,成功或失败

c# - 通过反射仅获取当前类(class)成员

c# - 一个对象怎么能不和null比较呢?

c# - 如何在命令提示符下运行 selenium c# test?

structuremap - Structuremap DefaultConventionScanner 可以找到非公共(public)类吗

c# - 无需解包即可从存档中获取程序集文件版本