1

简短的问题。registry.AddType(pluginType, type);和之间存在一些差异registry.For(pluginType).Use(type);

代码:

public class BasicConvention : ConfigurableRegistrationConvention
{
    public override void Process(Type type, Registry registry)
    {
            if (something)
                registry.For(pluginType).Use(type).Singleton();
        }
    }
}

public class BasicConvention : ConfigurableRegistrationConvention
{
    public override void Process(Type type, Registry registry)
    {
            if (something)
                registry.AddType(pluginType, type);
        }
    }
}

使用 WhatDoIHave() 我可以看到相同的结果:

使用添加类型:

===============================================================================================================================================================================================================================================================================
PluginType                  Namespace                          Lifecycle     Description                                                                                                                                               Name                                    
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ISession                    Paf.Application.Session            Transient     Paf.Application.Session ('Paf.Application.Session, Paf.Modules.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null')                              Paf.Application.Session,... (Default)
===============================================================================================================================================================================================================================================================================

使用 For().Use():

===============================================================================================================================================================================================================================================================================
PluginType                  Namespace                          Lifecycle     Description                                                                                                                                               Name                                    
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ISession                    Paf.Application.Session            Singleton     Paf.Application.Session                                                                                                                                (Default)                               
===============================================================================================================================================================================================================================================================================

唯一的区别在于描述...

有人吗?

4

2 回答 2

0

调用registry.AddType(pluginType, type)基本上是链接在一起的简写ForUseregistry.For(pluginType).Use(type).

调用registry.AddType(pluginType, type)会导致直接调用Registry.alter.set插件类型和一起指定的具体类型。

一起调用registry.For(pluginType).Use(type)ForUse. 调用For返回一个新GenericFamilyExpression的(构造函数调用Registry.alter.set接口类型),调用Use最终调用Registry.alter.set使具体类型成为插件系列的默认值。

请参阅Registry.csGenericFamilyExpression.cs的源代码,以及StructureMap 源中的其他类。

于 2014-08-20T19:05:32.510 回答
0

接受的答案并不完全正确。它们是不相同的。令人惊讶的是,答案的末尾指出了这一点。Use将为插件(类型)设置默认实例,AddType但不会。因此,您将无法使用结构映射作为带有 AddType 的服务定位器。你可以有这个错误No default Instance is registered and cannot be automatically determined for type <type>

于 2017-01-23T15:20:56.717 回答