gpt4 book ai didi

c# - 在静态构造函数中初始化容器

转载 作者:行者123 更新时间:2023-11-30 20:22:04 26 4
gpt4 key购买 nike

在静态构造函数中初始化简单注入(inject)器容器是否合法?

例子:

using SimpleInjector;

public static Bootstrapper
{
private readonly static Container container;

static Bootstrapper()
{
Bootstrapper.container = new Container();
}
}

最佳答案

正如@NedStoyanov 所说,静态构造函数提供唯一性保证,因此这可能是有益的。然而,静态构造函数的缺点是它们通常更难调试,并且从 cctor 主体抛出的任何异常都包含在 InitializationException 中,这使得更难发现实际问题。

我还想重复@WSriramSakthivel 的警告:尽管在您的组合根中将 Container 声明为 public readonly static 字段,但请防止从外部访问此字段 组合根,只要有可能。从组合根外部使用它意味着应用 Service Locator anti-pattern .

请注意,使用 cctor 初始化容器也有缺点。在集成测试中验证您的容器,并运行一些使用容器构建对象图的集成测试时,您通常希望让每个测试都有自己的容器实例,其配置略有不同。这是您在使用 cctor 时不会得到的东西。

长话短说,虽然使用 cctor 可能很好并且提供了一些很好的保证,但我认为在大多数情况下,它只会成为阻碍。

关于c# - 在静态构造函数中初始化容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32628713/

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