我在aspx页面中有以下代码:
<asp:ObjectDataSource id="odsOuterSource" TypeName="my.namespace.page"
SelectMethod="GetTestObject" DataObjectTypeName="my.namespace.Entities.TestObject" />
<asp:ObjectDataSource id="odsInnerSource" TypeName="my.namespace.page"
SelectMethod="GetAnotherTestObject"
DataObjectTypeName="my.namespace.Entities.AnotherTestObject" />
以及代码隐藏中的代码:
public TestObject GetTestObject()
{
Logic myLogic = new MyLogic();
return myLogic.GetTestObject();
}
public AnotherTestObject GetAnotherTestObject()
{
Logic myLogic = new MyLogic();
return myLogic.GetAnotherTestObject(testObject);
}
现在我的问题是,是否有办法获取由OuterSource返回的TestObject,以便我可以将它用于InnerSource而无需再次调用GetTestObject。
我希望你能帮助我。
编辑:为了更好的可读性而不是评论
感谢您的回答,但我对Mudu的回答有疑问:
如果我的OuterSource有参数,有没有办法做到这一点? 例如
<asp:ObjectDataSource id="odsOuterSource" TypeName="my.namespace.page"
SelectMethod="GetTestObject" DataObjectTypeName="my.namespace.Entities.TestObject">
<SelectParameters>
<asp:QueryStringParameter Name="id" QueryStringField="id" DefaultValue="0" />
</SelectParameters>
</asp:ObjectDataSource>
因为那时甚至我的GetTestObject都会有一个参数:
public TestObject GetTestObject(int id)
{
Logic myLogic = new MyLogic();
return myLogic.GetTestObject(id);
}
答案 0 :(得分:1)
您可以将其保存在会员中,可以是TestObject
,也可以是Lazy<TestObject>
:
private readonly Lazy<TestObject> myTestObject = new Lazy<TestObject>(() =>
{
var myLogic = new MyLogic();
return myLogic.GetTestObject();
});
使用此代码,您可以随意接收任何数量的代码。它将通过MyLogic
获取一次并在后续调用时重新返回:
public TestObject GetTestObject()
{
return this.myTestObject.Value;
}
public AnotherTestObject GetAnotherTestObject()
{
var testObject = this.myTestObject.Value; // re-used
Logic myLogic = new MyLogic();
return myLogic.GetAnotherTestObject(testObject);
}
当ASP.NET为每个请求创建页面的新实例时,将为每个请求重新创建Lazy<TestObject>
对象。因此,每个请求实际上会提取一次TestObject
。