ロギングを行うメソッド属性がいくつかあります。私たちのロギング コードはインターフェイス (ILog) の背後にあり、実装ではなく、属性がそのインターフェイスのみに依存するようにしたいと考えています。これは、テスト容易性や依存関係の逆転に関するものではなく、コンポーネントの結合をクリーンに保つためのものです。
例として、次のような Web (Mvc) 固有の属性がある場合があります。
HandleExceptionAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext context)
{
LogFactory.CreateInstance().Info("message here", "log entry type");
}
}
LogFactory は具体的な実装 Log.cs に依存しています。これは、私の Web DLL を具体的な実装を含む DLL に結合するという不幸な効果をもたらします。つまり、システム全体がより硬直的で壊れやすくなります。
このような依存関係が明らかになる他の場所では、IOC コンテナを使用して注入します。これはまさに私が属性でやりたいことですが、どうすればよいかわかりません!
それで、私の質問は次のとおりです。インターフェイスの背後にある .NET Framework 属性に具体的な依存関係をどのように注入できますか (できれば StructureMap のような IOC コンテナーを介して - しかし、機能するものは何でも問題ありません)。