Class HookPipeline<TEvent, TContext>
Namespace: DotBoxD.Plugins.Runtime
Assembly: DotBoxD.Plugins.dll
[PipelineSurface(PipelineTransport.Local)]public class HookPipeline<TEvent, TContext>Type Parameters
Section titled “Type Parameters”TEvent
TContext
Inheritance
Section titled “Inheritance”object ← HookPipeline<TEvent, TContext>
Inherited Members
Section titled “Inherited Members”object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()
Methods
Section titled “Methods”ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult>)
Section titled “ ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult>)”public HookPipeline<TEvent, TContext> ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult> options) where TResult : struct, IHookResultParameters
Section titled “Parameters”options ResultHookDispatchOptions<TResult>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
FireResultAsync<TResult>(TEvent, CancellationToken)
Section titled “ FireResultAsync<TResult>(TEvent, CancellationToken)”Dispatches result hooks for e in descending priority order and returns the first
successful result, or null when none is registered or none succeeds. The host applies
the returned result to its live state.
public ValueTask<TResult?> FireResultAsync<TResult>(TEvent e, CancellationToken cancellationToken = default) where TResult : struct, IHookResultParameters
Section titled “Parameters”e TEvent
cancellationToken CancellationToken
Returns
Section titled “Returns”ValueTask<TResult?>
Type Parameters
Section titled “Type Parameters”TResult
FireResultAsync<TResult>(TEvent, ResultHookDispatchOptions<TResult>, CancellationToken)
Section titled “ FireResultAsync<TResult>(TEvent, ResultHookDispatchOptions<TResult>, CancellationToken)”public ValueTask<TResult?> FireResultAsync<TResult>(TEvent e, ResultHookDispatchOptions<TResult> options, CancellationToken cancellationToken = default) where TResult : struct, IHookResultParameters
Section titled “Parameters”e TEvent
options ResultHookDispatchOptions<TResult>
cancellationToken CancellationToken
Returns
Section titled “Returns”ValueTask<TResult?>
Type Parameters
Section titled “Type Parameters”TResult
InvokeHostHandler(Func<TEvent, TContext, ValueTask>)
Section titled “ InvokeHostHandler(Func<TEvent, TContext, ValueTask>)”public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, TContext, ValueTask> handler)Parameters
Section titled “Parameters”handler Func<TEvent, TContext, ValueTask>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
InvokeHostHandler(Action<TEvent, TContext>)
Section titled “ InvokeHostHandler(Action<TEvent, TContext>)”public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent, TContext> handler)Parameters
Section titled “Parameters”handler Action<TEvent, TContext>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
InvokeHostHandler(Func<TEvent, ValueTask>)
Section titled “ InvokeHostHandler(Func<TEvent, ValueTask>)”public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, ValueTask> handler)Parameters
Section titled “Parameters”handler Func<TEvent, ValueTask>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
InvokeHostHandler(Action<TEvent>)
Section titled “ InvokeHostHandler(Action<TEvent>)”public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent> handler)Parameters
Section titled “Parameters”handler Action<TEvent>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Register<TResult>(Func<TEvent, TResult>, IRKernel?, int)
Section titled “ Register<TResult>(Func<TEvent, TResult>, IRKernel?, int)”public HookPipeline<TEvent, TContext> Register<TResult>(Func<TEvent, TResult> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TResult>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
Register<TResult>(Func<TEvent, TContext, TResult>, IRKernel?, int)
Section titled “ Register<TResult>(Func<TEvent, TContext, TResult>, IRKernel?, int)”public HookPipeline<TEvent, TContext> Register<TResult>(Func<TEvent, TContext, TResult> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TContext, TResult>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, ValueTask<TResult>>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, ValueTask<TResult>>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, ValueTask<TResult>> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, ValueTask<TResult>>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, TContext, ValueTask<TResult>>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, TContext, ValueTask<TResult>>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, ValueTask<TResult>> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TContext, ValueTask<TResult>>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, CancellationToken, ValueTask<TResult>>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, CancellationToken, ValueTask<TResult>>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, CancellationToken, ValueTask<TResult>> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, CancellationToken, ValueTask<TResult>>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, CancellationToken, ValueTask<TResult>> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, TResult>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, TResult>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TResult> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TResult>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
RegisterLocal<TResult>(Func<TEvent, TContext, TResult>, IRKernel?, int)
Section titled “ RegisterLocal<TResult>(Func<TEvent, TContext, TResult>, IRKernel?, int)”public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, TResult> handler, IRKernel? irHandler = null, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”handler Func<TEvent, TContext, TResult>
irHandler IRKernel?
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
Run(Func<TEvent, TContext, ValueTask>, IRKernel?)
Section titled “ Run(Func<TEvent, TContext, ValueTask>, IRKernel?)”The terminal the analyzer lowers to verified IR. It never runs as host code: un-lowered it throws, so plugin logic cannot accidentally execute unsandboxed.
public HookPipeline<TEvent, TContext> Run(Func<TEvent, TContext, ValueTask> handler, IRKernel? irHandler = null)Parameters
Section titled “Parameters”handler Func<TEvent, TContext, ValueTask>
irHandler IRKernel?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Run(Action<TEvent, TContext>, IRKernel?)
Section titled “ Run(Action<TEvent, TContext>, IRKernel?)”public HookPipeline<TEvent, TContext> Run(Action<TEvent, TContext> handler, IRKernel? irHandler = null)Parameters
Section titled “Parameters”handler Action<TEvent, TContext>
irHandler IRKernel?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Run(Func<TEvent, ValueTask>, IRKernel?)
Section titled “ Run(Func<TEvent, ValueTask>, IRKernel?)”public HookPipeline<TEvent, TContext> Run(Func<TEvent, ValueTask> handler, IRKernel? irHandler = null)Parameters
Section titled “Parameters”handler Func<TEvent, ValueTask>
irHandler IRKernel?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Run(Action<TEvent>, IRKernel?)
Section titled “ Run(Action<TEvent>, IRKernel?)”public HookPipeline<TEvent, TContext> Run(Action<TEvent> handler, IRKernel? irHandler = null)Parameters
Section titled “Parameters”handler Action<TEvent>
irHandler IRKernel?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
RunLocal(Func<TEvent, TContext, ValueTask>)
Section titled “ RunLocal(Func<TEvent, TContext, ValueTask>)”Native host terminal — runs in-process (NOT sandboxed). Use sparingly.
public HookPipeline<TEvent, TContext> RunLocal(Func<TEvent, TContext, ValueTask> handler)Parameters
Section titled “Parameters”handler Func<TEvent, TContext, ValueTask>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
RunLocal(Action<TEvent, TContext>)
Section titled “ RunLocal(Action<TEvent, TContext>)”public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent, TContext> handler)Parameters
Section titled “Parameters”handler Action<TEvent, TContext>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
RunLocal(Func<TEvent, ValueTask>)
Section titled “ RunLocal(Func<TEvent, ValueTask>)”public HookPipeline<TEvent, TContext> RunLocal(Func<TEvent, ValueTask> handler)Parameters
Section titled “Parameters”handler Func<TEvent, ValueTask>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
RunLocal(Action<TEvent>)
Section titled “ RunLocal(Action<TEvent>)”public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent> handler)Parameters
Section titled “Parameters”handler Action<TEvent>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Select<TNext>(Func<TEvent, TContext, TNext>, IRFunc<TEvent, TContext, TNext>?)
Section titled “ Select<TNext>(Func<TEvent, TContext, TNext>, IRFunc<TEvent, TContext, TNext>?)”Projects the flowing element to a new type for downstream Where/terminal stages.
public HookStage<TEvent, TNext, TContext> Select<TNext>(Func<TEvent, TContext, TNext> projection, IRFunc<TEvent, TContext, TNext>? irProjection = null)Parameters
Section titled “Parameters”projection Func<TEvent, TContext, TNext>
irProjection IRFunc<TEvent, TContext, TNext>?
Returns
Section titled “Returns”HookStage<TEvent, TNext, TContext>
Type Parameters
Section titled “Type Parameters”TNext
Select<TNext>(Func<TEvent, TNext>, IRFunc<TEvent, TNext>?)
Section titled “ Select<TNext>(Func<TEvent, TNext>, IRFunc<TEvent, TNext>?)”public HookStage<TEvent, TNext, TContext> Select<TNext>(Func<TEvent, TNext> projection, IRFunc<TEvent, TNext>? irProjection = null)Parameters
Section titled “Parameters”projection Func<TEvent, TNext>
irProjection IRFunc<TEvent, TNext>?
Returns
Section titled “Returns”HookStage<TEvent, TNext, TContext>
Type Parameters
Section titled “Type Parameters”TNext
Use(InstalledKernel)
Section titled “ Use(InstalledKernel)”public HookPipeline<TEvent, TContext> Use(InstalledKernel kernel)Parameters
Section titled “Parameters”kernel InstalledKernel
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Use(InstalledKernelPool)
Section titled “ Use(InstalledKernelPool)”public HookPipeline<TEvent, TContext> Use(InstalledKernelPool pool)Parameters
Section titled “Parameters”pool InstalledKernelPool
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Use<TKernel>()
Section titled “ Use<TKernel>()”public HookPipeline<TEvent, TContext> Use<TKernel>() where TKernel : classReturns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TKernel
UseGeneratedChain(PluginPackage)
Section titled “ UseGeneratedChain(PluginPackage)”Installs an analyzer-generated hook-chain package and wires it into this pipeline. Called by
the generated interceptor that replaces a Run(lambda) call site, so the lowered
chain runs as verified IR instead of throwing. Blocks on install at setup time.
public HookPipeline<TEvent, TContext> UseGeneratedChain(PluginPackage package)Parameters
Section titled “Parameters”package PluginPackage
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, ValueTask<TResult>>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, ValueTask<TResult>>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, ValueTask<TResult>>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, ValueTask<TResult>>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, ValueTask<TResult>>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, TContext, ValueTask<TResult>>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, CancellationToken, ValueTask<TResult>>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, CancellationToken, ValueTask<TResult>>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, CancellationToken, ValueTask<TResult>>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TResult>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TResult>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TResult> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, TResult>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, TResult>, int)
Section titled “ UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, TResult>, int)”public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, TResult> handler, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
handler Func<TEvent, TContext, TResult>
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseGeneratedResultChain<TResult>(PluginPackage, int)
Section titled “ UseGeneratedResultChain<TResult>(PluginPackage, int)”public HookPipeline<TEvent, TContext> UseGeneratedResultChain<TResult>(PluginPackage package, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”package PluginPackage
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseProjecting(InstalledKernel, string, RemoteLocalPush)
Section titled “ UseProjecting(InstalledKernel, string, RemoteLocalPush)”Wires a lowered local-terminal chain kernel (a remote RunLocal chain): the kernel’s
lowered Where/Select always run here in the sandbox, and for each event that passes the
filter the projected value is encoded and handed to push - the control-plane
callback that delivers it across the IPC boundary to the plugin’s native delegate. Non-matching events
never reach push, so filtering provably happens server-side before any IPC.
public HookPipeline<TEvent, TContext> UseProjecting(InstalledKernel kernel, string subscriptionId, RemoteLocalPush push)Parameters
Section titled “Parameters”kernel InstalledKernel
subscriptionId string
push RemoteLocalPush
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
UseProjectingResult(InstalledKernel, string, Type, RemoteLocalResultRequest, int)
Section titled “ UseProjectingResult(InstalledKernel, string, Type, RemoteLocalResultRequest, int)”public HookPipeline<TEvent, TContext> UseProjectingResult(InstalledKernel filterKernel, string subscriptionId, Type resultType, RemoteLocalResultRequest request, int priority = 0)Parameters
Section titled “Parameters”filterKernel InstalledKernel
subscriptionId string
resultType Type
request RemoteLocalResultRequest
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
UseProjectingResult<TResult>(InstalledKernel, string, RemoteLocalResultRequest, int)
Section titled “ UseProjectingResult<TResult>(InstalledKernel, string, RemoteLocalResultRequest, int)”public HookPipeline<TEvent, TContext> UseProjectingResult<TResult>(InstalledKernel filterKernel, string subscriptionId, RemoteLocalResultRequest request, int priority = 0) where TResult : struct, IHookResultParameters
Section titled “Parameters”filterKernel InstalledKernel
subscriptionId string
request RemoteLocalResultRequest
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Type Parameters
Section titled “Type Parameters”TResult
UseResult(InstalledKernel, Type, int)
Section titled “ UseResult(InstalledKernel, Type, int)”public HookPipeline<TEvent, TContext> UseResult(InstalledKernel kernel, Type resultType, int priority = 0)Parameters
Section titled “Parameters”kernel InstalledKernel
resultType Type
priority int
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Where(Func<TEvent, TContext, bool>, IRFunc<TEvent, TContext, bool>?)
Section titled “ Where(Func<TEvent, TContext, bool>, IRFunc<TEvent, TContext, bool>?)”public HookPipeline<TEvent, TContext> Where(Func<TEvent, TContext, bool> filter, IRFunc<TEvent, TContext, bool>? irFilter = null)Parameters
Section titled “Parameters”filter Func<TEvent, TContext, bool>
irFilter IRFunc<TEvent, TContext, bool>?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Where(Func<TEvent, TContext, ValueTask<bool>>)
Section titled “ Where(Func<TEvent, TContext, ValueTask<bool>>)”public HookPipeline<TEvent, TContext> Where(Func<TEvent, TContext, ValueTask<bool>> filter)Parameters
Section titled “Parameters”filter Func<TEvent, TContext, ValueTask<bool>>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Where(Func<TEvent, bool>, IRFunc<TEvent, bool>?)
Section titled “ Where(Func<TEvent, bool>, IRFunc<TEvent, bool>?)”Element-only filter — the same as the (element, context) overload with the context discarded. Both arities are always available so a stage need not take the context it doesn’t use.
public HookPipeline<TEvent, TContext> Where(Func<TEvent, bool> filter, IRFunc<TEvent, bool>? irFilter = null)Parameters
Section titled “Parameters”irFilter IRFunc<TEvent, bool>?
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>
Where(Func<TEvent, ValueTask<bool>>)
Section titled “ Where(Func<TEvent, ValueTask<bool>>)”public HookPipeline<TEvent, TContext> Where(Func<TEvent, ValueTask<bool>> filter)Parameters
Section titled “Parameters”filter Func<TEvent, ValueTask<bool>>
Returns
Section titled “Returns”HookPipeline<TEvent, TContext>