5

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

4

1 回答 1

3

这让我困惑了一段时间,直到我想起了 Structuremap google group 中的这个帖子

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

于 2013-03-07T20:52:05.987 回答