1

私の質問はロングショットだと思います。

私が属性を持っているとしましょう:

public sealed class MyCustomAttribute: ActionFilterAttribute

クラスメソッドで使用

    [MyCustomAttribute]
    public virtual ActionResult Options(FormCollection collection)

次に、コンストラクターのパラメーターを追加する必要があります

    public MyCustomAttribute(IMyDependentObject dependentObject)
    {           
              (...)
    }

(おそらく、それがAsp.NET MCVコードであることに気付くでしょう)

DIを使用してこの属性を作成したいと思います。Asp.NET MVCコードによって自動的に作成されますが、Castleisteadを使用するためのコードをどこでどのように記述できるかわかりません。

何か案は?

4

1 に答える 1

2

I konw城は既存のオブジェクトの注入をサポートしていないため、属性の構築はユーザーの制御下にないため、属性を注入することはできません。Ninjectなどの他のIoCコンテナは、既存のオブジェクトのインジェクションをサポートします。彼らはあなたの属性フィルターの特性を注入します。必要なことを正確に実行する拡張機能については、 http: //github.com/ninject/ninject.web.mvcを参照してください。


城に留まりたい場合にできることは、ControllerActionInvoker(非同期コントローラーの場合はAsyncControllerActionInvoker)から派生した独自のControllerActionInvokerをすべてのコントローラーに注入することです。独自の呼び出し元で、GetFiltersをオーバーライドします。ベースによって返されるフィルターに加えて、城によって作成されたFilterInfosを追加します。

情報をフィルタリングして作成および追加する決定は、次のようなさまざまな戦略で実現できます。

  • バインディングの名前などの情報を含む独自のカスタム属性を追加します
  • 構成ファイル/データベース

MVC3への切り替えを検討してください。これにより、すべてが少し簡単になります。独自のFilterProviderを登録できるため、すべてがはるかに簡単になります。このFilterProviderでは、追加するフィルター情報を決定する必要があります。上記の2つの戦略をもう一度参照してください。MVC3とフィルターの詳細については、 http: //bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.htmlを参照してください。

于 2010-10-29T21:55:17.847 に答える