私はIoCとしてAutofacを使用しており、DIのトピックで読んだすべてのことから、「コンストラクターインジェクション」を使用してクラスの依存関係を明示的に公開することを教えています...ただし、Log4Netでロギングファサード(Common.Logging)も使用して作成しましたそれを注入するAutofacモジュール。これで、ロギングを実行するすべてのクラスに、追加のコンストラクターパラメーターがあります(サンプル#1を参照)。
ロギングファサードを使用するときにロギングDIが必要かどうか疑問に思っていますか?コンストラクターの署名を介して依存関係を明示的に公開することは、優れたアーキテクチャーであることを理解しています。 しかし、ファサードをログに記録する場合、次のことが当てはまると思います。
- いつでもロギングフレームワークを「スワップアウト」できます
- クラスIMHOは実際にはロガーに依存していません。ロギングが構成されていない場合は、NullLoggerが使用されます。それはほとんど「あなたがそれを必要とするならそれはthreです」対「あなたがそれを供給しない限りそれは機能しない」種類の取引です...(サンプル#2を見てください)
それで、他の人はどう思いますか?ロギングファサードを注入するのはやり過ぎですか?このトピックについても同様の質問がいくつかありますが、より一般的な用語(インフラストラクチャ)-私は主にロギングに興味があります...。
// IoC "way"
public class MyController : BaseController
{
private readonly ILog _logger;
public MyController(ILog logger)
{
_logger = logger;
}
public IList<Customers> Get()
{
_logger.Debug("I am injected via constructor using some IoC!");
}
}
// just use the logger "way"
public class MyController : BaseController
{
private static readonly ILog Logger = LogManager.GetCurrentClassLogger();
public IList<Customers> Get()
{
Logger.Debug("Done! I can use it!");
}
}