データベースやクラウドストレージコンテナに画像をアップロードするために現在使用されているAttachmentService.csクラスがあります。クラウドにアップロードするとき、2つの別々のメソッドによって呼び出されたときに再利用したい再試行ロジックがいくつかあります。各関数をパラメーターとして渡し、渡されたメソッド内から呼び出したいと思います。これが私が現在持っている2つの署名です:
C#
//Example: I want to be able to pass the first function and also the second
//I'm sure it can done with generics but can't seem to get it currently
private AttachmentUploadResult UploadAttachmentToGLS(Func<string, Guid, byte?[], string, AttachmentUploadResult> uploadFunction)
private AttachmentUploadResult UploadAttachmentToGLS(Func<AttachmentEntity, AttachmentUploadResult> uploadFunction)
上記のコードに、どちらかを取ることができる署名を1つだけ含めたい
Func<string, Guid, byte?[], string, AttachmentUploadResult> uploadFunction
またはFunc<AttachmentEntity, AttachmentUploadResult> uploadFunction
、私のメソッドが次のようになるようにします。
private AttachmentUploadResult UploadAttachmentToGLS(Func<parameters, AttachmentUploadResult>uploadFunction)
{
//Some retry logic
uploadFunction(parameters);
//Some more retry logic
}
上記を達成する方法はありますか?Funcを読みましたが、これが正しいデリゲートであるとは思いません。
関数のシグニチャは次のようになります。メソッドFunc<AttachmentUploadResult>
内のパラメータはあまり気にしないUploadAttachment
ので、それらを閉じる必要があります。その場合、呼び出しは次のようになります。
Upload(() => SomeUploadMethod(theActual, parameters, toTheMethod));
また、実装の詳細をUploadAttachment
メソッドから隠すこともできます。気になるのは、「これは、アップロードを実行したいときに呼び出す関数です」ということだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加