Unity&WebForm(1): 自定义IHttpHandlerFactory使用Unity对ASP.NET Webform页面进行依赖注入
2008-06-10 21:00
816 查看
背景
在日常的开发中,特别是使用了多层结构的程序,在视图层的页面逻辑中时常会用到业务逻辑的对象,此时就有可能产生如下的代码public partial class Default : System.Web.UI.Page
public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
public void ReleaseHandler(IHttpHandler handler)
private static IHttpHandlerFactory CreatePageFactory()
private static IHttpHandler Build(IHttpHandler page)
private static readonly IUnityContainer unityContainer;
static UnityHttpHandlerFactory()
<unity>
<typeAliases>
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity"/>
</typeAliases>
<containers>
<container name="HttpHandlerContainer">
<types>
<!-- Default页面的依赖 -->
<type type="GDev.Test.WebApp.Default, GDev.Test.WebApp" mapTo="GDev.Test.WebApp.Default, GDev.Test.WebApp">
<lifetime type="singleton" />
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<property name="UserService" propertyType="GDev.Test.WebApp.IUser, GDev.Test.WebApp">
<dependency />
</property>
</typeConfig>
</type>
<type type="GDev.Test.WebApp.IUser, GDev.Test.WebApp" mapTo="GDev.Test.WebApp.MyUser, GDev.Test.WebApp">
<lifetime type="singleton" />
</type>
</types>
</container>
</containers>
</unity>
最后的工作当然是将此HttpHandlerFactory加入运行环境,在web.config中system.web配置组下的httpHandlers段加入以下2行即可
<remove verb="*" path="*.aspx"/>
<add verb="*" path="*.aspx" type="Cst.Core.Web.Factory.UnityHttpHandlerFactory, Cst.Core.Web"/>
这2行将原有的默认HttpHandlerFactory(即PageHandlerFactory)取消,代替以新的UnityHttpHandlerFactory
为了演示具体的效果,在Default的Page_Load方法中加入代码,使方法最终如下
protected void Page_Load(object sender, EventArgs e)
{
{
Response.Write("注入成功!");
}
}
结果当然是如预期地显示出了"注入成功"字样,也就不放图了~
问题
1.因为在Unity中注册的页面其实只是用来作为BuildUp的参考,所以其生命周期管理是Transient好还是Singleton好依旧是个问题,有待更详细的测试2.Unity只提供对public的属性的注入,需要对protected属性注入还要自己写扩展
3.只能用属性注入,因为Page的构造是由PageHandlerFactory完成的,Unity无力拦截构造函数的注入
总结
本文提供了一种思路,使用HttpHandlerFactory对ASP.NET Webform的页面进行依赖注入,不仅仅是Unity,使用同样的思路也可以用Spring.NET或者Castle进行依赖注入,同样,也可以配合使用PIAB完成更多的功能最后题外话:哪位老师有Unity的扩展方面的相关教程的请告诉我一下,特别是Inject方面的扩展(比如通过从Session或者QueryString取对象),万分感谢
相关文章推荐
- [导入]自定义IHttpHandlerFactory使用Unity对ASP.NET Webform页面进行依赖注入
- 自定义IHttpHandlerFactory使用Unity对ASP.NET Webform页面进行依赖注入
- 自定义IHttpHandlerFactory使用Unity对ASP.NET Webform页面进行依赖注入 (转)
- ASP.NET Web Application 中使用 Unity 依赖注入容器
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
- Unity&Webform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面
- 使用Spring.Net对Web页面进行依赖注入
- 使用Spring.Net对Web页面进行依赖注入
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
- Unity&Webform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面 (转)
- 使用Unity 实现ASP.NET Web API 依赖注入
- asp.net web页面自定义分页控件使用详解
- 如何在ASP.NET中制作Web用户自定义控件,并在aspx页面中使用它的方法和属性?
- asp.net多线程在web页面中简单使用
- ASP.NET_MVC使用Spring.Net.MVC依赖注入学习笔记
- ASP.NET 2.0 中使用自定义缓存依赖
- 使用Autofac在ASP.NET Web API上实现依赖注入
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本