StructureMap中AddRegistry和IncludeRegistry之间有什么区别?

时间:2015-12-04 12:10:01

标签: .net dependency-injection structuremap

StructureMap中的Registry类有一个IncludeRegistry<T>() where T : Registry, new()方法,可以在创建新的注册表实例时使用,例如:

class MyRegistry : Registry
{
    public MyRegistry ()
    {
        IncludeRegistry<AnotherRegistry>();
        //For<>(...).Use<>(...); ... etc
    }
}

继承自ConfigurationExpression的{​​{1}}类除此之外还有Registry方法。

在创建容器时,我们应该选择哪些(实际)差异,以及:

AddRegistry<T>() where T : Registry, new()

我找不到StructureMap文档中差异的任何描述,所以我很感激任何见解。

1 个答案:

答案 0 :(得分:2)

IncludeRegistry旨在与注册表一起使用,以导入另一个注册表的内容。

Registry中方法的XML documentation表示:

  

将配置从其他注册表导入此注册表

Here就是文档中的一个例子:

var registry = new Registry();
registry.IncludeRegistry<YellowBlueRegistry>();
配置容器时,配置表达式中使用

AddRegistry。它创建(当使用泛型重载时)注册表并将配置从它导入容器。

ConfigurationExpression::AddRegistry<T>的{​​{3}}说:

  

创建并添加T

类型的Registry对象

XML documentation就是文档中的一个例子:

var container2 = new Container(c => { c.AddRegistry<FooBarRegistry>(); });

令人困惑的是ConfigurationExpression继承了Registry,因此同时拥有这两种方法。

简而言之,对于容器配置(根据文档和测试用例),您应该使用:

var myContainer = new Container(conf =>
{
    conf.AddRegistry<RegistryA>();
});

修改

杰拉米的回答是:

  

不得不看代码。您不太可能看到任何差异   在行为方面,AddRegistry应该已经删除了4.我   建议您只使用IncludeRegistry