2

SimpleInjector を使用して構成の最後に呼び出し、ドキュメントcontainer.Verify()で説明されているようにデバッガーで診断情報を取得します。その情報をログファイルに書きたいと思います。プログラムでアクセスする方法、またはロガーまたはトレーサーを SimpleInjector にフックする方法はありますか?

4

2 に答える 2

2

SimpleInjector の Diagnostics メカニズムの Facade クラスとして分類できる ContainerDebugView は、Container クラスの DebuggerTypeProxy としてのみ使用されます。

これは public コンストラクターを持つ内部クラスであるため、リフレクションと Activator クラスを使用せずに構築することはできません。ただし、これを行うと、コンテナーでコンストラクターを呼び出し、Items プロパティを使用して、構成内の警告とエラーの名前、説明などを含む DebuggerViewItem の配列を取得できるはずです。

デバッガーを使用せずにエラーを表示できるようにしたい理由が確かにわかるので、これがお役に立てば幸いです。(例: 単体テスト)

于 2013-05-22T14:24:19.450 に答える
2

Simple Injector 2.4 には診断 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));
于 2013-05-22T14:38:45.813 に答える