最近你在使用NBear框架做项目的时候为了方便还是用了ObjectDataSource(以下简称ODS),虽然使用ODS破坏了Ioc模式使View对Presenter中的对象产生了依赖,但暂时没有找到合适的办法解决这个问题。于是顺便对ODS进行了一些研究。
属性:
TypeName:ODS定要用作源对象的类名称(一般用业务类)。
eg:
- ods.TypeName = typeof(BizProcess.User).FullName;
对于源对象有这样的说明:"如果它是静态方法,则不需要完成任何特殊的工作。如果该方法是实例方法,则 ObjectDataSource 必须能够创建该类的实例。要达到该目的,最简单的方法是将该业务类编写为包含默认的构造函数。"
DataObjectTypeName:ODS在响应Select、Update等方法时传递给源对象(一般是业务对象)的实体类实例。
eg:
- ods.DataObjectTypeName = typeof(Entity.User).FullName;
SelectMethod,InsertMethod,UpdateMethod,DeleteMethod,SelectCountMethod等:ODS用来对应源对象中相应方法的名称。
eg:
- ods.SelectMethod = "SelectUser";ods..UpdateMethod = "UpdateUser";(...)
对于SelectMethod必须返回一个可枚举的列表,例如,集合、数组、DataSet 或 DataReader。
SelectParameters,UpdateParameters等:ODS在调用源对象方法时所指定的参数。根据传递参数的不同,源对象会找到不同的重载方法来执行。
eg:
- ods.SelectParameters.Add("cacuParameterID", TypeCode.Object, "");
或者在ods标签内添加:
- <SelectParameters>
- <asp:Parameter Name="cacuParameterID" Type="Object" />
- </SelectParameters>
事件:
ObjectCreating:"在创建由 TypeName 属性标识的对象之前发生。"实例化源对象时触发。它使你可以用所需的任何构造函数来代替默认的源对象的构造函数去实例化该源对象,然后将该源象实例传递给数据源控件。
eg:
MSDN:"在创建由 TypeName 属性标识的对象之前发生。"
ObjectCreated:
eg:
MSDN:处理ObjectCreated事件,在ObjectDataSource对象调用业务对象数据方法以执行数据操作前,调用业务对象的其他方法,设置属性或执行其他特定于业务对象的初始化。通过ObjectInstance属性访问对象的引用,该属性由ObjectDataSourceEventArgs 对象公开。
如果被标识以执行数据操作的方法为 static(Visual Basic 中为 Shared),则永远不会引发 ObjectCreating 和 ObjectCreated 事件。(larsson:估计是指源对象如果是静态方法则不会触发这两个事件,和之前所说的“对于源对象如果它是静态方法,则不需要完成任何特殊的工作。如果该方法是实例方法,则 ObjectDataSource 必须能够创建该类的实例。”吻合。)