1

ロギングを行うメソッド属性がいくつかあります。私たちのロギング コードはインターフェイス (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 コンテナーを介して - しかし、機能するものは何でも問題ありません)。

4

2 に答える 2

4

この記事を参照してください - Ninject を使用して依存関係を ASP.NET MVC ActionFilters に注入する方法

http://codeclimber.net.nz/archive/2009/02/10/how-to-use-ninject-to-inject-dependencies-into-asp.net-mvc.aspx

于 2010-07-02T08:26:18.497 に答える
1

ロガーをインターフェースにして、属性のプロパティまたはコンストラクターのいずれかに渡すことができませんでした。

LoggerAttribute
{
    [Dependency]
    public ILogger Logger {get; set;}

    ...
}

もし私だったら、ロガーを基本クラスに入れてプロパティを設定するつもりでした。

于 2009-10-20T22:07:14.027 に答える