2

使用 SimpleInjector 我在配置结束时调用,并按照文档中的container.Verify()描述在调试器中获取诊断信息。我想将该信息写入日志文件。有没有办法以编程方式访问它或将记录器或跟踪器挂接到 SimpleInjector 中?

4

2 回答 2

2

Simple Injector 2.4 contains a diagnostic API (SimpleInjector.Diagnostics.dll) that allow you to query the container for diagnostic warnings. Using this API you can write integration tests that automatically check the configuration for diagnostic warnings:

// using SimpleInjector.Diagnostics;

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

    container.Verify();

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

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

Of course, you can also write this to a file:

var results = Analyzer.Analyze(container);

File.WriteAllLines("c:\\diagnostic.txt", results.Select(r => r.Description));
于 2013-05-22T14:38:45.813 回答
2

ContainerDebugView 我猜可以归类为 SimpleInjector 中诊断机制的 Facade 类,仅用作 Container 类的 DebuggerTypeProxy。

它是一个带有公共构造函数的内部类,因此如果不使用反射和 Activator 类就无法构造它。但是,如果您这样做,您应该能够使用容器调用构造函数,然后使用 Items 属性获取 DebuggerViewItem 数组,其中包含配置中警告和错误的名称、描述等。

希望这会有所帮助,因为我当然可以理解为什么您可能希望能够在不使用调试器的情况下查看错误。(例如在单元测试中)

于 2013-05-22T14:24:19.450 回答