1

私が望むものを最もよく説明する方法がわからないので、高レベルから始めて、実装に関する私の考えを検討します。

c# を使用して、ジェネリックな戻り値の型を持ち、サービス参照からのメソッドをパラメーターとして受け取るメソッドを作成しようとしています。

このジェネリック メソッドは、サービス参照を新規作成し、渡したサービス参照のメソッドを呼び出し、サービス参照に必要なすべてのエラー処理とチェックを行い、それを閉じるか中止して、呼び出しの結果を返します。

これの一種の擬似コード:

public T CallServiceReference<T>(method serviceRefMethod) {
  T result = null;
  ServiceReference svcClient = new ServiceReference.Client();
    try {
      result = svcClient.serviceRefMethod;
      svcClient.Close();   
    } catch (ExceptionType ex) {
      // log error message
      svcClient.Abort();
      throw;
    }
  return result;
}

これはC#で可能ですか?私はジェネリックとデリゲートを探しています。私の主な問題の 1 つは、サービス参照をインスタンス化せずに、サービス参照のメソッドのデリゲートを作成することです。サービス ref をインスタンス化する必要がある場合は、メソッド呼び出しごとに Close、Abort、およびエラー処理をすべて配置したほうがよいと思います。

探しているパターンの名前がわからない、または存在するかどうかさえわからないため、少し難しいですが、さまざまなデザインパターンを調査しています。

追加情報や説明を提供できるかどうかお知らせください。

更新 (パート 2): 今、呼び出しているメソッドで変数をカプセル化するデリゲートを作成しようとしています。

public delegate T Del<T>();
public static IEnumerable<String> GetDataFromService(String username) {
    ServiceReference.ServiceClient client = new ServiceReference.ServiceClient();
    // the method I'm going to call returns a string array
    Del<String[]> safeClientCall = new Del<String[]>(client.DataCall);
    // the above call is what I need to use so the C# compiles, but I want to do this
    // the below code throws an error...
    Del<String[]> safeClientCall = new Del<String[]>(client.DataCall(username));
    var result = DataCallHandlerMethod(ref client, safeClientCall);
    return result;
}

基本的に、呼び出し元のメソッドからユーザー名パラメーターを渡します。そのユーザー名パラメーターは既に定義されています。デリゲートが呼び出されたときに定義したくありません。c# を使用してこれを行う方法はありますか?

4

1 に答える 1