0

我正在使用 Microsoft Unity 2.1 IoC 容器。这没有像 Windsor 或 StructureMap 这样的自动/基于约定的配置,所以我通过 NuGet下载了 UnityConfiguration 1.4.1(请参阅http://thedersen.com/projects/unityconfiguration/ )。

通过创建 UnityRegistries(如其他容器中的安装程序和模块)来执行配置。我创建了其中几个用于注册不同类型的类:

internal class WidgetRegistry : UnityRegistry
{
    public WidgetRegistry()
    {
        Register<IWidget, Widget>();
    }
}

internal class GubbinsRegistry : UnityRegistry
{
    public GubbinsRegistry()
    {
        Register<IGubbins, FirstGubbins>().WithName("gubbins1");
        Register<IGubbins, SecondGubbins>().WithName("gubbins2");
    }
}

在组合根中,我可以添加以下内容:

container.Configure(
    unityRegistry =>
        {
            unityRegistry.AddRegistry<WidgetRegistry>();
            unityRegistry.AddRegistry<GubbinsRegistry>();
        });

...一切正常。但这意味着每次添加新注册表时都要手动修改组合根代码。我想做的是使用 UnityConfiguration 的扫描工具自动为我完成这项工作;也就是说,删除上述对 AddRegistry() 的调用并将它们替换为如下内容:

container.Configure(
    unityRegistry =>
    {
        unityRegistry.Scan(
            scanner =>
            {
                scanner.AssembliesInBaseDirectory();
                scanner.ForRegistries();
            });
    });

不幸的是,这根本不起作用。WidgetRegistry 和 GubbinsRegistry 构造函数永远不会被调用。

我怀疑我没有正确使用 UnityConfiguration 的这个功能。有谁知道如何做到这一点?

非常感谢,

马特

4

1 回答 1

1

尝试将您的注册表从内部更改为公共。

于 2013-01-25T18:44:30.027 回答