解决ObjectDataSource不能依赖注入NHibernate实体问题
用ObjectDataSource和GridView一类的服务器控件,确实可以做到很oop(不过个人更喜欢和Repeater绑定,就是有些麻烦,这个很快)
但如果在多层框架中应用需要用到依赖注入,ObjectDataSource需要绑定到接口上。
ObjectDataSource只支持类,不能实例化接口。这样就会导致多层结构的依赖性。
google半天,终于找到,只要如下使用就可以了。
protected IBLLTestUser bll = BLLFactory.Create("IBLLTestUser") as IBLLTestUser;
protected void odsTestUser_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = bll;
}
这样就可以传入实例了。但界面绑定还是需要调用原始类才能自动生成界面元素,有点不爽,不过这个影响不大,因为下层变化了,只要注入就可以了,和原来的没关系,只是方便页面绑定生成。和ilist<t>这样的NHibernate实体一道使用可以自动生成gridview的界面字段。下面是可以生成GridView全部功能,包括分页,修改,删除,排序时的ObjectDataSource的设置。
未使用 ObjectDataSource前GridView,只能手工绑定,相当麻烦,使用ObjectDataSource后GridView对应的NHibernate实体属性就自动带出来了,如下图对比。