私は、ILogインターフェイスと2つの可能な実装:コンソールログとファイルログを持っています。私はどのように私は可能性が思ったんだけどウィンザーキャッスル複数のコンポーネントを特定のサービス
private ILog log;
public TestController(ILog _log)
{
log = _log;
}
:私は次のコードを持っている私のTestControllerで
container.Register(
Component.For<ILogFactory>().ImplementedBy<LogFactory>().Named("first").OnCreate(x => x.initialize(LogType.Console, null)).LifestyleSingleton(),
Component.For<ILogFactory>().ImplementedBy<LogFactory>().Named("second").OnCreate(x => x.initialize(LogType.File, null)).LifestyleSingleton(),
Component.For<ILog>().UsingFactoryMethod(kernel => kernel.Resolve<ILogFactory>("first").GetLog(LogType.Console)).Named("first_log").LifestyleSingleton(),
Component.For<ILog>().UsingFactoryMethod(kernel => kernel.Resolve<ILogFactory>("second").GetLog(LogType.File)).Named("second_log").LifestyleSingleton()
);
:私は、それゆえ私は、コントローラのインストーラで次のコードを持っているMVCアプリケーションでウィンザー城を使用していますfirstlogまたはsecond_logという名前のILogを注入することを決定してください。
を多くの偽のクラス(モックやスタブ)に0を渡します。アプリケーションの一部であるDI構成をテストしないでください。通常、単体テストでDIコンテナは使用しません。したがって、 'TestController'がモックであると仮定すると、このシナリオでテスト対象のクラスは何ですか?特定のロガーまたは特定のログファクトリをテストする場合は、テストで 'new'キーワードを使用してそのインスタンスを作成する必要があります。 – NightOwl888
これは単体テストではありません。コントローラーTestControllerという名前をつけただけですが、myControllerなど、必要なものを呼び出すことができます。私はちょうどこのコントローラで、私はその名前に基づいて注入したいログを扱うことができるだろうかと思っています –
ロギングに関しては、ロギングコンポーネント( 'ILog')とコンフィグレーション実行時にログファイル、コンソール、データベースなどの場所とデバッグ、警告、エラーなどのレベルを判断するために使用されます。これにより、コードを再コンパイルせずにログ設定を変更することができます。 Log4netはこれの良い例です。 –