简短的问题。 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()我可以看到相同的内容:
使用AddType:
===============================================================================================================================================================================================================================================================================
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()。使用():
===============================================================================================================================================================================================================================================================================
PluginType Namespace Lifecycle Description Name
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ISession Paf.Application.Session Singleton Paf.Application.Session (Default)
===============================================================================================================================================================================================================================================================================
唯一的区别在于描述......
有人?
答案 0 :(得分:0)
对registry.AddType(pluginType, type)
的调用基本上是将For
和Use
链接在一起的简写,如同registry.For(pluginType).Use(type)
。
调用registry.AddType(pluginType, type)
会导致直接调用Registry.alter.set
插件类型和指定的具体类型。
将registry.For(pluginType).Use(type)
链For
和Use
联系在一起。对For
的调用会返回一个新的GenericFamilyExpression
(构造函数为接口类型调用Registry.alter.set
),对Use
的调用最终会调用Registry.alter.set
来生成具体类型是插件系列的默认值。
查看Registry.cs和GenericFamilyExpression.cs的源代码以及StructureMap source中的其他类。
答案 1 :(得分:0)
接受的答案并不完全正确。他们不一样。令人惊讶的是,在答案的最后指出了这一点。 Use
将为插件(类型)设置默认实例,而AddType
则不会。因此,您将无法使用Structure Map作为AddType的服务定位器。您可以出现此错误No default Instance is registered and cannot be automatically determined for type <type>