Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用StructureMap从私有或内部构造函数调用构建_C#_Dependency Injection_Structuremap - Fatal编程技术网

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

C# 无法使用StructureMap从私有或内部构造函数调用构建,c#,dependency-injection,structuremap,C#,Dependency Injection,Structuremap,在我的一个类中,我有一个用于单元测试的内部构造函数和一个我的应用程序调用的私有构造函数。内部构造函数有我的依赖项的参数,而私有构造函数没有参数,它调用build来使用setter注入。原样,代码在我身上崩溃,出现以下错误: StructureMap Exception Code: 245 Error while trying to create an InstanceBuilder for My.Namespace.And.Class, My.Assembly, Version=5.0.0.0

在我的一个类中,我有一个用于单元测试的内部构造函数和一个我的应用程序调用的私有构造函数。内部构造函数有我的依赖项的参数,而私有构造函数没有参数,它调用
build
来使用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
StructureMap异常代码:245
尝试为My.Namespace.And.Class、My.Assembly、Version=5.0.0.0、Culture=neutral、PublicKeyToken=null创建InstanceBuilder时出错
在c:\code\StructureMap\Source\StructureMap\Graph\PluginCache.cs中的StructureMap.Graph.PluginCache.1(类型t)处:第40行
在c:\code\StructureMap\Source\StructureMap\Util\Cache.cs中的StructureMap.Util.Cache`2.get_项(KEY)处:第82行
在c:\code\StructureMap\Source\StructureMap\Graph\PluginCache.cs中的StructureMap.Graph.PluginCache.FindBuilder(类型pluggedType)处:第52行
在c:\code\StructureMap\Source\StructureMap\Container.cs中的StructureMap.Container.build(对象目标)处:第243行
在c:\code\StructureMap\Source\StructureMap\ObjectFactory.cs中的StructureMap.ObjectFactory.build(对象目标)处:第297行
对象引用未设置为对象的实例。
在c:\code\StructureMap\Source\StructureMap\Construction\ConstructorFunctionBuilder.cs中的StructureMap.ConstructorFunctionBuilder`1.CreateBuilder(插件插件)处:第25行
在c:\code\StructureMap\Source\StructureMap\Construction\BuilderCompiler.FuncCompiler`1.CreateBuilder(Plugin-Plugin)中的StructureMap.Construction.BuilderCompiler.FuncCompiler:51行
在c:\code\StructureMap\Source\StructureMap\Construction\BuilderCompiler.cs中的StructureMap.Construction.BuilderCompiler.CreateBuilder(插件插件)处:第12行
在c:\code\StructureMap\Source\StructureMap\Graph\PluginCache.cs中的StructureMap.Graph.PluginCache.b\uu 1(类型t)处:第36行
如果我更改默认构造函数,使其为公共的,而不是私有的,甚至是内部的,那么一切都按预期工作。这是私有构造函数和内部构造函数的预期行为,还是一个bug?

是的,对于structuremap,自动配置实例

IMHO如果您对容器(
build
)进行显式调用,那么您将向DI添加耦合,这会破坏DI的某些用途(移除耦合)。我更倾向于,如果出于某种原因需要显式地填充依赖项,只需调用ask容器以获取具体类(
ObjectFactory.GetInstance()
),它就会在最复杂的公共构造函数中自动填充依赖项