我正在向现有的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问题。 –