无法使用StructureMap从私有或内部构造函数调用构建

本文关键字:内部 构建 函数调用 StructureMap | 更新日期: 2023-09-27 18:03:30

在我的一个类中,我有一个用于单元测试的内部构造函数,以及我的应用程序调用的私有构造函数。内部有我的依赖的参数,而私有构造函数没有参数,并调用BuildUp使用setter注入。代码在我身上崩溃,并出现以下错误:

StructureMap Exception Code:  245
Error while trying to create an InstanceBuilder for My.Namespace.And.Class, My.Assembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type t) in c:'code'structuremap'Source'StructureMap'Graph'PluginCache.cs:line 40
at StructureMap.Util.Cache`2.get_Item(KEY key) in c:'code'structuremap'Source'StructureMap'Util'Cache.cs:line 82
at StructureMap.Graph.PluginCache.FindBuilder(Type pluggedType) in c:'code'structuremap'Source'StructureMap'Graph'PluginCache.cs:line 52
at StructureMap.Container.BuildUp(Object target) in c:'code'structuremap'Source'StructureMap'Container.cs:line 243
at StructureMap.ObjectFactory.BuildUp(Object target) in c:'code'structuremap'Source'StructureMap'ObjectFactory.cs:line 297
Object reference not set to an instance of an object.
at StructureMap.Construction.ConstructorFunctionBuilder`1.CreateBuilder(Plugin plugin) in c:'code'structuremap'Source'StructureMap'Construction'ConstructorFunctionBuilder.cs:line 25
at StructureMap.Construction.BuilderCompiler.FuncCompiler`1.CreateBuilder(Plugin plugin) in c:'code'structuremap'Source'StructureMap'Construction'BuilderCompiler.cs:line 51
at StructureMap.Construction.BuilderCompiler.CreateBuilder(Plugin plugin) in c:'code'structuremap'Source'StructureMap'Construction'BuilderCompiler.cs:line 12
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type t) in c:'code'structuremap'Source'StructureMap'Graph'PluginCache.cs:line 36

如果我改变默认构造函数,使它是公共的,而不是私有的,甚至是内部的,那么一切都像预期的那样工作。这是私有和内部构造函数的预期行为还是这是一个bug?

无法使用StructureMap从私有或内部构造函数调用构建

是的,您需要一个structuremap的公共构造函数来自动配置实例。

IMHO,如果您对容器(BuildUp)进行显式调用,那么您将向DI添加耦合,这违背了DI的一些目的(消除耦合)。我更喜欢坚持简单的构造函数注入,然后如果我出于某种原因需要显式地填充依赖关系,只需调用请求容器的具体类(ObjectFactory.GetInstance<Class>()),它将自动填充最复杂的公共构造函数中的依赖关系。