用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實體屬性就自動帶出來了,如下圖對比。