標籤:c style class blog http a
簡介
在第二部分我們建立了控制器工廠。現在我們要把我們的控制器交給Windsor來管理。
Installer
Windsor有一個專門的類installer.cs,用來向容器註冊組件。在你的應用程式中至少會有幾個這樣的installer類,所以要保持他們的代碼整潔以及可見度。接下來在我們的應用程式中建立一個專門的檔案夾"Installer"來存放這些類。我們首先要註冊到容器中的就是控制器,所以我們先來建立一個ControllersInstaller.cs類。
Controller installer
Installer類需要為Windsor解決兩個問題:怎麼在應用程式中找到控制器和怎麼配置控制器。
第一點,怎樣找到控制器?很簡單,在ASP.NET MVC中,控制器都是要實現Icontroller介面的。
配置起來很簡單,首先,mvc架構要求我們為每一次的請求都建立一個新的控制器執行個體。而Windsor預設是只有在第一次請求的時候建立執行個體的。相應的installer類:
這個類重寫了IwindsorInstaller的Install方法,通過Windsor的Fluent Registration API註冊了控制器。這是我們推薦使用的,也是最簡潔、最靈活的方法。每當我們在應用程式中新增加Controller(大的應用裡可能會有幾百個)的時候,Windsor會自動註冊它們,我們不需要手動做任何事情,我們只要遵循Windsor的約定即可。
繼續看代碼,靜態類Classes是進行註冊的進入點,首先調用public類型的非抽象方法FromThisAssembly(),這是一個包含註冊器的組件(mvc的組件,存在於控制器的生命週期中)。但是我們並不需要註冊所有的組件,所以BasedOn<IContorller>過濾器要求類必須實現Icontroller介面,雖然叫BasedOn,但是它同樣的也是一個泛型介面。最後是非常重要的一點----instance lifestyle.mvc希望的時使用過後即銷毀,但每次Windsor需要的時候要有一個新的執行個體,而且通知Windsor在什麼時候不需要執行個體,可以回收執行個體了是調用者的職責所在(這也是為什麼我們在WindsorControllerFactory類裡重寫了ReleaseController方法)。