2016-04-19 14 views
2

Serilogを使用するサードパーティのソフトウェアを利用するプロジェクトがあります。そのためにStartupメソッドにStartup.csファイルの次の行を追加しました。Serilog MVCインテグレーション

Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Verbose() 
      .ReadFrom.ConfigurationSection(Configuration.GetSection("Logging:Serilog")) 
     .CreateLogger(); 

別のプロジェクトでは、Microsoft.Extensions.Logging.ILoggerに基づくロギングメカニズムを使用するサービスレイヤがあります。

私は最初のプロジェクトにUIを追加しています。サービスコレクションを通じてMicrosoft.Extensions.Logging.ILoggerをコントローラクラスに注入しています。私はそれを使用して(内部コントローラ)サービスレイヤオブジェクトを作成します。

です。私はこれらのコントローラーに既存のSerilogロガーを注入したいと思います。コントローラがDIを通じてフェッチできるように、サービスコレクションに追加するためのきれいな方法を見つけることができませんでした。助言がありますか?

答えて

1

解決策は、既存のLoggerオブジェクトのインスタンスを依存性注入コンテナに登録することです。この単一のインスタンスは、毎回新しいインスタンスが作成されるのではなく、コントローラのコンストラクタに渡されます。これを行うには

コードは、使用している特定の依存性注入フレームワークに依存しますが、ユニティでは、これはあなたがLog.Loggerをインスタンス化しているあなたが投稿コード、後に行くべき

container.RegisterInstance<ILogger>(Log.Logger) 

だろう。

this answerで説明したように、あなたのコントローラがSerilog.ILoggerインターフェイスに縛られないようにするには、さらに、独自の​​インタフェースを定義することによって、あなたのコードをより再利用可能にすることができます。

関連する問題