UnityConfiguration扫描

时间:2013-01-25 15:10:10

标签: configuration dependency-injection unity-container

我正在使用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的这个功能。有没有人有任何想法如何做到这一点?

非常感谢,

马特

1 个答案:

答案 0 :(得分:1)

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