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