我可以将SimpleInjectors诊断的结果写入日志文件吗?

时间:2013-05-22 13:41:05

标签: .net ioc-container simple-injector

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

Simple Injector 2.4包含diagnostic API(SimpleInjector.Diagnostics.dll),允许您查询容器以获取诊断警告。使用此API,您可以编写集成测试,自动检查诊断警告的配置:

// 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));
}

当然,您也可以将其写入文件:

var results = Analyzer.Analyze(container);

File.WriteAllLines("c:\\diagnostic.txt", results.Select(r => r.Description));