我目前使用自己的依賴注入框架。這是非常輕量級的工作,但是我期待着做面向方面的編程,並且需要更好的東西。我正在測試Castle Windsor,因爲它能夠執行基於代理的運行時攔截。Castle Windsor - 如何在web.config中註冊MVC控制器
我寫了一個簡單的MVC應用程序使用Castle Windsor從web.config安裝,它工作正常。問題是我必須單獨註冊每個控制器。在有很多控制器的應用程序中,這將變得乏味。
的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>
使用登記的登記流利API方法,有可能登記所有控制器中的一行代碼。不幸的是,這完全違背了使用運行時代理的目的。如果我希望使用我的代碼編譯我的AOP配置,我將使用類似PostSharp的編譯時間編織的東西。
流利註冊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中做了什麼?
我意識到這一點,但是這並沒有真正的幫助。我希望能夠通過配置來修改控制器的攔截器,但是我正在尋找一種不那麼繁瑣的方法。有沒有辦法通過Fluent API註冊控制器,但通過web.config(在單個組件元素中)添加攔截器?順便說一句,我修改第二個問題更具體。 –
讓我試着回顧一下......你想註冊流利的所有控制器,但是你想從配置中明確地指定一些攔截器。如果是這樣,我不知道,但聽起來有點尷尬......如果我正確理解了你的需求,你可以利用「配置」(根據你的Fluent註冊示例)來匹配給定的控制器,因此分配一個給定的攔截器:您可以在級聯中添加少量配置以滿足您的所有需求。 – Crixo
我真的不想註冊流利的東西。我更願意在代碼中這樣做,以便重新配置不需要重新編譯。 –