0

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);
}

ここで私の質問は、GetTestObject を再度呼び出さなくても InnerSource に使用できるように、OuterSource によって返された TestObject を取得する方法があるかどうかです。

これで私を助けてくれることを願っています。

編集:コメントよりも読みやすくするために

ご回答ありがとうございます。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);
}
4

1 に答える 1

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実際にはリクエストごとに 1 回フェッチされます。

于 2012-11-14T14:15:55.527 に答える