私が望むものを最もよく説明する方法がわからないので、高レベルから始めて、実装に関する私の考えを検討します。
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# を使用してこれを行う方法はありますか?