StructureMap中的AddConcreteType和TheDefaultIsConcreteType有什么区别?

时间:2020-03-06 14:49:47  来源:igfitidea点击:

我正在设置StructureMap,似乎我想做的所有事情都有两种方法可以做到,但我不清楚它们之间有什么区别。例如,这两行之间有什么区别:

StructureMapConfiguration.ForRequestedType<IConsumer>().AddConcreteType<Consumer>();

StructureMapConfiguration.ForRequestedType<IConsumer>().TheDefaultIsConcreteType<Consumer>();

同样,使用AddInstanceOf和ForRequestedType有什么区别?

解决方案

StructureMapConfiguration.ForRequestedType<IConsumer>().AddConcreteType<Consumer>();

此方法会将"消费者"类型添加为IConsumer的插入类型。如果没有其他用于IConsumer的插入类型,则此类型将是默认类型,并返回请求的IConsumer实例。否则,我们将需要使用具体键(默认情况下是该类型的程序集限定名称)来获取此实例。

StructureMapConfiguration.ForRequestedType<IConsumer>().TheDefaultIsConcreteType<Consumer>();

这与AddConcreteType相似,不同之处在于它还使该类型成为默认类型。如果对IConsumer的请求未指定具体密钥,则将返回此类型。

至于AddInstanceOf和ForRequestedType之间的区别,AddInstance of允许我们提供一个委托,该委托将处理创建指定类型的实例。 ForRequestedType为我们提供CreatePluginFamilyExpression的实例(对于ForRequestedType(类型t),则为GenericFamilyExpression),该实例使我们能够流畅地配置实例。