gpt4 book ai didi

c# - 无法使用 StructureMap 从私有(private)或内部构造函数调用 BuildUp

转载 作者:行者123 更新时间:2023-11-30 14:39:07 25 4
gpt4 key购买 nike

在我的一个类中,我有一个用于单元测试的内部构造函数和一个我的应用程序调用的私有(private)构造函数。内部有我的依赖项的参数,而私有(private)构造函数没有参数并调用 BuildUp 以使用 setter 注入(inject)。代码因以下错误而崩溃:

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

如果我更改默认构造函数,使其成为公共(public)的而不是私有(private)的,甚至是内部的,那么一切都会按预期进行。这是私有(private)和内部构造函数的预期行为还是错误?

最佳答案

是的,you need a public constructor用于 structuremap 自动配置实例。

恕我直言,如果您对容器 (BuildUp) 进行显式调用,那么您就是在向 DI 添加耦合,这违背了 DI 的某些目的(去除耦合)。我更喜欢 stick to simple constructor injection , 那么如果我出于某种原因确实需要显式填充依赖项,只需调用具体类的容器 ( ObjectFactory.GetInstance<Class>() ),它将自动填充最复杂的公共(public)构造函数中的依赖项。

关于c# - 无法使用 StructureMap 从私有(private)或内部构造函数调用 BuildUp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com