我正在使用 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 的这个功能。有谁知道如何做到这一点?
非常感谢,
马特