我正在向現有的WebForms應用程序(使用Castle Windsor)引入依賴注入框架。Webforms和依賴注入
我對DI有很深的經驗,並且傾向於強烈支持構造函數注入而非setter注入。如果您熟悉Webforms,則知道ASP.Net框架處理頁面和控件對象的構建,從而無法真正構建注入。
我目前的解決方案是將容器註冊到Global.asax的Application_Start事件中,並將容器作爲公共靜態變量保存在Global中。然後,我只需在頁面中直接解決我需要的每個服務,或者在需要時直接解決這些服務。因此,在每個頁面的頂部,我結束了這樣的代碼:
private readonly IMyService _exposureManager = Global.IoC.Resolve<IMyService>();
private readonly IMyOtherService _tenCustomersExposureManager = Global.IoC.Resolve<IMyOtherService>();
顯然,我不喜歡散佈我的應用程序或爲我的網頁/控制依賴是不向容器中的所有這些引用 - 明確的,但我一直沒有找到更好的方法。
是否有更優雅的解決方案使用DI與Webforms?
我發現這篇文章http://www.codemag.com/Article/1210031它具有優秀的示例代碼,以便如何在WPF,MVC和WebForms上實現依賴注入(對於WebForms,使用'PageHandlerFactory') 。似乎認爲,由於代碼隱藏類限制,您將不得不使用setter注入。有趣的是,它還顯示了Microsoft Managed Extensibility Framework(MEF)如何以非常有用且稍微不標準的方式幫助您解決這個類似的DI問題。 –