1

現在、独自の依存性注入フレームワークを使用しています。それは非常に軽量で仕事をしますが、私はアスペクト指向プログラミングを行うことを検討しており、より良いものが必要です. プロキシベースのランタイム インターセプトを行う機能があるため、Castle Windsor をテストしています。

web.config からインストールする Castle Windsor を使用して単純な MVC アプリケーションを作成しましたが、正常に動作します。問題は、各コントローラーを個別に登録する必要があったことです。多くのコントローラーを使用するアプリケーションでは、これは面倒です。

web.config

<castle>
  <components>
    <component id="LoggerInterceptor" type="MvcApp.LoggerInterceptor, MvcApp" lifestyle="Singleton"/>
    <component Name="AccountController" type="MvcApp.Controllers.AccountController, MvcApp" lifestyle="Transient">
      <interceptors>
        <interceptor>${LoggerInterceptor}</interceptor>
      </interceptors>
    </component>
    <component Name="HomeController" type="MvcApp.Controllers.HomeController, MvcApp" lifestyle="Transient">
      <interceptors>
        <interceptor>${LoggerInterceptor}</interceptor>
      </interceptors>
    </component>      
  </components>
</castle>

Fluent Registration API の登録方法を使用すると、すべてのコントローラーを 1 行のコードで登録できます。残念ながら、これはランタイム プロキシを使用する目的を完全に無効にします。AOP 構成を自分のコードでコンパイルしたい場合は、コンパイル時に織り込む PostSharp のようなものを使用します。

Fluent 登録 API

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(Classes.FromThisAssembly()
             .BasedOn<IController>()
             .LifestyleTransient()
             .Configure((c => c.LifeStyle.Transient.Interceptors<LogInterceptor>())));
}

私は常にコントローラーを登録するので、コードでそれを行うことは問題ではありませんが、構成を介してどの依存関係、パラメーター、およびインターセプターが使用されているかを判断したいと考えています。

そう ...

単一のコンポーネント要素を使用して web.config を介してすべてのコントローラーを登録する方法はありますか?

または

コントローラーがコードを介して登録されるように構成を混在させる方法はありますが、インターセプターは web.config で行われますか?

4

1 に答える 1

0

単一のコンポーネント要素を使用して web.config を介してすべてのコントローラーを登録する方法はありますか?

私はそうではないと思います

コントローラーがコードを介して登録されるように構成を混在させる方法はありますが、それ以外はすべて web.config で行われますか?

もちろん。特定のサービスに応じてコントローラーの 1 つがあるとします。
行ったように Fluent api を介してすべてのコントローラーを登録し、その単一のサービスを構成で明示的に登録できます。
構成に登録する内容は、最初にコンテナに登録されることに注意してください。
注文登録は、解決自体ではなく、同じインターフェイスに対する複数の登録の場合にのみ関連します。

于 2013-09-25T09:08:45.097 に答える