CardComponentHelperExtendRequestAsyncTRequest, TResponse, TContext, TExtension - метод
Дополняет запрос к API карточек цепочками расширений.
Пространство имён: Tessa.Cards.ComponentModelСборка: Tessa (в Tessa.dll) Версия: 4.0.4
public static Task<TResponse> ExtendRequestAsync<TRequest, TResponse, TContext, TExtension>(
Object? validationObject,
IExtensionContainer extensionContainer,
TContext context,
Func<IExtensionExecutor, TContext, CancellationToken, Task<TResponse>> performRequestFuncAsync,
string beforeRequestMethodName,
string afterRequestMethodName,
string? afterRequestFinallyMethodName = null,
Func<TContext, TResponse, CancellationToken, ValueTask>? coerceContextActionAsync = null,
Func<IExtensionExecutor, TContext, CancellationToken, Task>? beforePerformRequestActionAsync = null,
CancellationToken cancellationToken = default
)
where TRequest : CardInfoStorageObject
where TResponse : new(), CardResponseBase
where TContext : CardExtensionContext, ICardRequestExtensionContext<TRequest, TResponse>
where TExtension : class, ICardExtension
Public Shared Function ExtendRequestAsync(Of TRequest As CardInfoStorageObject, TResponse As {New, CardResponseBase}, TContext As {CardExtensionContext, ICardRequestExtensionContext(Of TRequest, TResponse)}, TExtension As {Class, ICardExtension}) (
validationObject As Object,
extensionContainer As IExtensionContainer,
context As TContext,
performRequestFuncAsync As Func(Of IExtensionExecutor, TContext, CancellationToken, Task(Of TResponse)),
beforeRequestMethodName As String,
afterRequestMethodName As String,
Optional afterRequestFinallyMethodName As String = Nothing,
Optional coerceContextActionAsync As Func(Of TContext, TResponse, CancellationToken, ValueTask) = Nothing,
Optional beforePerformRequestActionAsync As Func(Of IExtensionExecutor, TContext, CancellationToken, Task) = Nothing,
Optional cancellationToken As CancellationToken = Nothing
) As Task(Of TResponse)
public:
generic<typename TRequest, typename TResponse, typename TContext, typename TExtension>
where TRequest : CardInfoStorageObject
where TResponse : gcnew(), CardResponseBase
where TContext : CardExtensionContext, ICardRequestExtensionContext<TRequest, TResponse>
where TExtension : ref class, ICardExtension
static Task<TResponse>^ ExtendRequestAsync(
Object^ validationObject,
IExtensionContainer^ extensionContainer,
TContext context,
Func<IExtensionExecutor^, TContext, CancellationToken, Task<TResponse>^>^ performRequestFuncAsync,
String^ beforeRequestMethodName,
String^ afterRequestMethodName,
String^ afterRequestFinallyMethodName = nullptr,
Func<TContext, TResponse, CancellationToken, ValueTask>^ coerceContextActionAsync = nullptr,
Func<IExtensionExecutor^, TContext, CancellationToken, Task^>^ beforePerformRequestActionAsync = nullptr,
CancellationToken cancellationToken = CancellationToken()
)
static member ExtendRequestAsync :
validationObject : Object *
extensionContainer : IExtensionContainer *
context : 'TContext *
performRequestFuncAsync : Func<IExtensionExecutor, 'TContext, CancellationToken, Task<'TResponse>> *
beforeRequestMethodName : string *
afterRequestMethodName : string *
?afterRequestFinallyMethodName : string *
?coerceContextActionAsync : Func<'TContext, 'TResponse, CancellationToken, ValueTask> *
?beforePerformRequestActionAsync : Func<IExtensionExecutor, 'TContext, CancellationToken, Task> *
?cancellationToken : CancellationToken
(* Defaults:
let _afterRequestFinallyMethodName = defaultArg afterRequestFinallyMethodName null
let _coerceContextActionAsync = defaultArg coerceContextActionAsync null
let _beforePerformRequestActionAsync = defaultArg beforePerformRequestActionAsync null
let _cancellationToken = defaultArg cancellationToken new CancellationToken()
*)
-> Task<'TResponse> when 'TRequest : CardInfoStorageObject when 'TResponse : new() and CardResponseBase when 'TContext : CardExtensionContext and ICardRequestExtensionContext<'TRequest, 'TResponse> when 'TExtension : not struct and ICardExtension
- validationObject Object
- Объект, от имени которого выполняется валидация.
- extensionContainer IExtensionContainer
- Контейнер, содержащий зарегистрированные расширения.
- context TContext
- Контекст, передаваемый между расширениями в цепочке.
- performRequestFuncAsync FuncIExtensionExecutor, TContext, CancellationToken, TaskTResponse
-
Функция, которая принимает объект, выполняющий расширения, осуществляет запрос к API карточек и возвращает ответ.
- beforeRequestMethodName String
-
Имя метода для цепочки расширений, выполняемых перед запросом к API карточек.
- afterRequestMethodName String
-
Имя метода для цепочки расширений, выполняемых после запроса к API карточек.
- afterRequestFinallyMethodName String (Optional)
-
Имя метода для цепочки расширений, выполняемых при возникновении исключения на любом моменте выполнения (включая цепочку
beforeRequestMethodName) или после расширений afterRequestMethodName в случае отсутствия исключений.
Любые исключения, возникающие в этих расширениях, не приводят к прекращению выполнения цепочки (последующие расширения выполняются).
При этом все исключения, кроме OperationCanceledException, логируются в результате валидации.
- coerceContextActionAsync FuncTContext, TResponse, CancellationToken, ValueTask (Optional)
-
Метод, выполняющий корректировку контекста перед вызовом цепочки расширений afterRequestMethodName,
или null, если корректировка не требуется.
- beforePerformRequestActionAsync FuncIExtensionExecutor, TContext, CancellationToken, Task (Optional)
-
Действие, выполняемое после beforeRequestMethodName и перед performRequestFuncAsync.
При этом не происходит проверка наличия результата и его валидности.
- cancellationToken CancellationToken (Optional)
Propagates notification that operations should be canceled.
- TRequest
-
Тип запроса к API карточек.
Должен быть унаследован от класса CardInfoStorageObject.
- TResponse
-
Тип ответа на запрос к API карточек.
Должен быть унаследован от класса CardResponseBase и иметь открытый конструктор по умолчанию.
- TContext
-
Тип контекста, используемого в расширениях.
Должен быть унаследован от класса CardExtensionContext,
и должен реализовывать интерфейс ICardRequestExtensionContextTRequest, TResponse.
- TExtension
-
Ссылочный тип расширений.
Должен реализовывать интерфейс ICardExtension.
TaskTResponseОтвет на запрос к API карточек, который мог быть изменён цепочками расширений.