2

質問が少し不明確である場合は申し訳ありません。この質問を整理/一般化してください。私は英語を自分でできるほどよく知らない

Web サービスを使用する必要がある Web サービスのすべてのメソッドは、最初のパラメーターとして認証オブジェクトを受け取ります

class webservice{
    e_webservice_return_value method1(object authentication,object param1,object param2,object param32)
    e_webservice_return_value method2(object authentication,object param1,object param2)
    .....
}

何百もの方法があります。

すべてのメソッドを提供するプロバイダー クラスを作成したい これで、provider という名前のクラスを作成し、各メソッドに書き込むことができます

class provider{
    object _auth;
    e_webservice_return_value method1(object param1,object param2,object param3)
    {
        var res= method1(_auth,param1,param2,param3);
        if(res=bad auth)
        {
            ReAuth(auth);
        }
        return res;
    }

    e_webservice_return_value method2(object param1,object param2)
    {
        var res =return e_webservice_return_value method2(_auth,param1,param2);
        if(res=bad auth)
        {
            ReAuth(auth);
        }
        return res;
    }
}

何百ものメソッドすべてにこのパターンが必要です。

すべて同じ機能を持つ100dsの関数を実際に記述せずに、そのようなファサードオブジェクトを作成する手法はありますか? (最初のパラメータのみ同じ) 他は異なる場合があります

4

1 に答える 1

1

と一緒に行きたいかもしれませんReflection.Emit。すばらしいが、少し時代遅れかもしれないチュートリアルが、このサイトにあります。MSDN も参照してください。優れたドキュメントがあります。

一般的にやりたいことは、各メソッド (またはクラス全体) を属性でマークし、属性を持つそのようなメソッド/クラスごとにラッピング メソッドを作成し、コードを置き換えることです。アプリケーションの初期化時またはこのクラス/メソッドへの最初の呼び出し時に実行することができます。設計はあなた次第です。

これは簡単な作業ではありませんが、実際に私たちのプロジェクトで同じケースがあり、非常に優れたソリューションであることが証明されました. これは、特定の属性を持つ各メソッドが同様の処理を必要としたためです。

コードを発行するための代替アプローチがいくつかあることを覚えておいてください。

Reflection.EmitIL を使用すること自体は非常に面倒ですが、確かに、内部で c# コードで何が起こっているかについてより多くを学ぶことができます。

于 2012-11-21T08:10:59.873 に答える