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

Bri*_*iec 3 c# structuremap dependency-injection

在我的一个类中,我有一个用于单元测试的内部构造函数,以及一个我的应用程序调用的私有构造函数.内部具有我的依赖项的参数,而私有构造函数没有参数,并调用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
Run Code Online (Sandbox Code Playgroud)

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

Bro*_*ook 6

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

恕我直言,如果您正在明确调用容器(BuildUp),那么您将添加到DI的耦合,这违背了DI的一些目的(删除耦合).我更喜欢坚持简单的构造函数注入,然后如果由于某种原因需要显式填充依赖项,只需调用请求容器的具体类(ObjectFactory.GetInstance<Class>()),它将自动填充最复杂的公共构造函数中的依赖项.