我正在使用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的这个功能。有没有人有任何想法如何做到这一点?
非常感谢,
马特
答案 0 :(得分:1)
尝试将注册表从内部更改为公共。