2013-09-24 56 views
1

我目前使用自己的依賴注入框架。這是非常輕量級的工作,但是我期待着做面向方面的編程,並且需要更好的東西。我正在測試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中做了什麼?

回答

0

有沒有一種方法來註冊所有的控制器通過web.config與 單個組件元素?

我guees不

有沒有一種方法,以混合配置,使得控制器通過代碼註冊 ,但一切是在web.config中做了什麼?

肯定。假設你有一個控制器取決於特定的服務。
您可以像所做的那樣通過Fluent API註冊所有控制器,並在配置中明確註冊該單一服務。
只要記住你在配置中註冊的內容將首先在容器中註冊。
訂單註冊僅適用於多個相同接口註冊的情況,不適用於分辨率本身。

+0

我意識到這一點,但是這並沒有真正的幫助。我希望能夠通過配置來修改控制器的攔截器,但是我正在尋找一種不那麼繁瑣的方法。有沒有辦法通過Fluent API註冊控制器,但通過web.config(在單個組件元素中)添加攔截器?順便說一句,我修改第二個問題更具體。 –

+0

讓我試着回顧一下......你想註冊流利的所有控制器,但是你想從配置中明確地指定一些攔截器。如果是這樣,我不知道,但聽起來有點尷尬......如果我正確理解了你的需求,你可以利用「配置」(根據你的Fluent註冊示例)來匹配給定的控制器,因此分配一個給定的攔截器:您可以在級聯中添加少量配置以滿足您的所有需求。 – Crixo

+0

我真的不想註冊流利的東西。我更願意在代碼中這樣做,以便重新配置不需要重新編譯。 –

相關問題