gpt4 book ai didi

.net - 设置简单注入(inject)器的记录器

转载 作者:行者123 更新时间:2023-12-04 17:06:49 25 4
gpt4 key购买 nike

我已将我的应用程序设置为使用 Simple Injector作为 DI 容器,我已经注册了所有的存储库/服务,并且我正在寻找设置最新的步骤:Logging what Simple Injector在自己的业务中作为输出写入。

现在我不是在谈论如何注册 Logger (在我的特定情况下,我使用 log4net ,但这适用于所有日志记录框架,但是我如何告诉 Simple Injector 使用 log4net 进行日志记录?
我没有看到任何.Log例如 Unity

最佳答案

在内部,Simple Injector 根本不记录任何内容。这是一个非常明确的设计决策,因为 Simple Injector 的 API 不是通过没人会看到的日志系统报告警告和错误,而是专门为防止错误而设计的,当它检测到诸如歧义之类的问题时会抛出异常。

沟通问题的异常在几个阶段被抛出。首先,在注册期间检查各种条件和约束。二、调用.Verify()时, Simple Injector 检查它是否可以构建所有已注册的类型并进行各种分析以验证您的对象图是否结构合理。作为最后的手段,万一Verify未调用,当第一次解析服务时会执行一些检查。

然而,Simple Injector 确实提供了两个 API 来获取有关其注册的文本信息。

而不是调用 Verify() ,您可以使用 Analyzer获取有关验证结果的结构化信息。这将包括关于不会导致验证抛出的图表的诊断信息(即提示)。例如,可以将以下测试添加到您的测试套件中:

[TestMethod]
public void Container_Never_ContainsDiagnosticWarnings() {
// Arrange
var container = Bootstrapper.GetInitializedContainer();

container.Verify(VerificationOption.VerifyOnly);

// Assert
var results = Analyzer.Analyze(container);

Assert.IsFalse(results.Any(), Environment.NewLine +
string.Join(Environment.NewLine,
from result in results
select result.Description));
}

有关这方面的更多信息,请参阅 documentation about Diagnostics .

Simple Injector 还允许通过构建对象图的类似 C# 的字符串表示来可视化对象图。这可以通过调用 InstanceProducer.VisualizeObjectGraph() 来完成。 .一个 InstanceProducer可调用 Container.GetRegistration()获取或 Container.GetRegistration(Type) .这是一个例子:
var container = new Container();

container.Register<Foo>();
container.Register<IBar, Bar>();
container.Register<ILogger, FileLogger>(Lifestyle.Singleton);
container.Register<IDependency1, Dependency1>();
container.Register<IDependency2, Dependency2>();

// You need to verify to get the correct output of those methods
container.Verify();

var r = container.GetRegistration(typeof(Foo));

Console.WriteLine(r.VisualizeObjectGraph());

这可能会导致以下输出:
Foo(
FileLogger(
Dependency1(),
Dependency2()),
Bar(
Dependency1(),
SomeService()));

关于.net - 设置简单注入(inject)器的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50950798/

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