CardComponentHelperExtendRequestAsyncTRequest, TResponse, TContext, TExtension - метод
Дополняет запрос к API карточек цепочками расширений.
Пространство имён: Tessa.Cards.ComponentModelСборка: Tessa (в Tessa.dll) Версия: 3.6.0.22
public static Task<TResponse> ExtendRequestAsync<TRequest, TResponse, TContext, TExtension>(
Object validationObject,
IExtensionContainer extensionContainer,
TContext context,
Func<IExtensionExecutor<TExtension>, CancellationToken, Task<TResponse>> performRequestFuncAsync,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>> beforeRequestExpression,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>> afterRequestExpression,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>> afterRequestFinallyExpression = null,
Func<TContext, TResponse, CancellationToken, ValueTask> coerceContextActionAsync = 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(Of TExtension), CancellationToken, Task(Of TResponse)),
beforeRequestExpression As Expression(Of ExtensionMethodReferenceAsync(Of TExtension, TContext)),
afterRequestExpression As Expression(Of ExtensionMethodReferenceAsync(Of TExtension, TContext)),
Optional afterRequestFinallyExpression As Expression(Of ExtensionMethodReferenceAsync(Of TExtension, TContext)) = Nothing,
Optional coerceContextActionAsync As Func(Of TContext, TResponse, CancellationToken, ValueTask) = 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<TExtension>^, CancellationToken, Task<TResponse>^>^ performRequestFuncAsync,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>^>^ beforeRequestExpression,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>^>^ afterRequestExpression,
Expression<ExtensionMethodReferenceAsync<TExtension, TContext>^>^ afterRequestFinallyExpression = nullptr,
Func<TContext, TResponse, CancellationToken, ValueTask>^ coerceContextActionAsync = nullptr,
CancellationToken cancellationToken = CancellationToken()
)
static member ExtendRequestAsync :
validationObject : Object *
extensionContainer : IExtensionContainer *
context : 'TContext *
performRequestFuncAsync : Func<IExtensionExecutor<'TExtension>, CancellationToken, Task<'TResponse>> *
beforeRequestExpression : Expression<ExtensionMethodReferenceAsync<'TExtension, 'TContext>> *
afterRequestExpression : Expression<ExtensionMethodReferenceAsync<'TExtension, 'TContext>> *
?afterRequestFinallyExpression : Expression<ExtensionMethodReferenceAsync<'TExtension, 'TContext>> *
?coerceContextActionAsync : Func<'TContext, 'TResponse, CancellationToken, ValueTask> *
?cancellationToken : CancellationToken
(* Defaults:
let _afterRequestFinallyExpression = defaultArg afterRequestFinallyExpression null
let _coerceContextActionAsync = defaultArg coerceContextActionAsync 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 FuncIExtensionExecutorTExtension, CancellationToken, TaskTResponse
-
Функция, которая принимает объект, выполняющий расширения, осуществляет запрос к API карточек и возвращает ответ.
- beforeRequestExpression ExpressionExtensionMethodReferenceAsyncTExtension, TContext
-
Выражение, ссылающееся на цепочку расширений, выполняемых перед запросом к API карточек.
- afterRequestExpression ExpressionExtensionMethodReferenceAsyncTExtension, TContext
-
Выражение, ссылающееся на цепочку расширений, выполняемых после запроса к API карточек.
- afterRequestFinallyExpression ExpressionExtensionMethodReferenceAsyncTExtension, TContext (Optional)
-
Выражение, ссылающееся на цепочку расширений, выполняемых при возникновении исключения на любом моменте выполнения (включая цепочку
beforeRequestExpression) или после расширений afterRequestExpression в случае отсутствия исключений.
Любые исключения, возникающие в этих расширениях, не приводят к прекращению выполнения цепочки (последующие расширения выполняются).
При этом все исключения, кроме OperationCanceledException, логируются в результате валидации.
- coerceContextActionAsync FuncTContext, TResponse, CancellationToken, ValueTask (Optional)
-
Метод, выполняющий корректировку контекста перед вызовом цепочки расширений afterRequestExpression,
или null, если корректировка не требуется.
- cancellationToken CancellationToken (Optional)
- Объект, посредством которого можно отменить асинхронную задачу.
- TRequest
-
Тип запроса к API карточек.
Должен быть унаследован от класса CardInfoStorageObject.
- TResponse
-
Тип ответа на запрос к API карточек.
Должен быть унаследован от класса CardResponseBase и иметь открытый конструктор по умолчанию.
- TContext
-
Тип контекста, используемого в расширениях.
Должен быть унаследован от класса CardExtensionContext,
и должен реализовывать интерфейс ICardRequestExtensionContextTRequest, TResponse.
- TExtension
-
Ссылочный тип расширений.
Должен реализовывать интерфейс ICardExtension.
TaskTResponseОтвет на запрос к API карточек, который мог быть изменён цепочками расширений.