Skip to content

Class HookPipeline<TEvent, TContext>

Namespace: DotBoxD.Plugins.Runtime
Assembly: DotBoxD.Plugins.dll

[PipelineSurface(PipelineTransport.Local)]
public class HookPipeline<TEvent, TContext>

TEvent

TContext

objectHookPipeline<TEvent, TContext>

object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult>)

Section titled “ ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult>)”
public HookPipeline<TEvent, TContext> ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult> options) where TResult : struct, IHookResult

options ResultHookDispatchOptions<TResult>

HookPipeline<TEvent, TContext>

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, IHookResult

e TEvent

cancellationToken CancellationToken

ValueTask<TResult?>

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, IHookResult

e TEvent

options ResultHookDispatchOptions<TResult>

cancellationToken CancellationToken

ValueTask<TResult?>

TResult

InvokeHostHandler(Func<TEvent, TContext, ValueTask>)

Section titled “ InvokeHostHandler(Func<TEvent, TContext, ValueTask>)”
public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, TContext, ValueTask> handler)

handler Func<TEvent, TContext, ValueTask>

HookPipeline<TEvent, TContext>

InvokeHostHandler(Action<TEvent, TContext>)

Section titled “ InvokeHostHandler(Action<TEvent, TContext>)”
public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent, TContext> handler)

handler Action<TEvent, TContext>

HookPipeline<TEvent, TContext>

InvokeHostHandler(Func<TEvent, ValueTask>)

Section titled “ InvokeHostHandler(Func<TEvent, ValueTask>)”
public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, ValueTask> handler)

handler Func<TEvent, ValueTask>

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent> handler)

handler Action<TEvent>

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, IHookResult

handler Func<TEvent, TResult>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, TContext, TResult>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, ValueTask<TResult>>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, TContext, ValueTask<TResult>>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, CancellationToken, ValueTask<TResult>>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, TResult>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

handler Func<TEvent, TContext, TResult>

irHandler IRKernel?

priority int

HookPipeline<TEvent, TContext>

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)

handler Func<TEvent, TContext, ValueTask>

irHandler IRKernel?

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Run(Action<TEvent, TContext> handler, IRKernel? irHandler = null)

handler Action<TEvent, TContext>

irHandler IRKernel?

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Run(Func<TEvent, ValueTask> handler, IRKernel? irHandler = null)

handler Func<TEvent, ValueTask>

irHandler IRKernel?

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Run(Action<TEvent> handler, IRKernel? irHandler = null)

handler Action<TEvent>

irHandler IRKernel?

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)

handler Func<TEvent, TContext, ValueTask>

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent, TContext> handler)

handler Action<TEvent, TContext>

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> RunLocal(Func<TEvent, ValueTask> handler)

handler Func<TEvent, ValueTask>

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent> handler)

handler Action<TEvent>

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)

projection Func<TEvent, TContext, TNext>

irProjection IRFunc<TEvent, TContext, TNext>?

HookStage<TEvent, TNext, TContext>

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)

projection Func<TEvent, TNext>

irProjection IRFunc<TEvent, TNext>?

HookStage<TEvent, TNext, TContext>

TNext

public HookPipeline<TEvent, TContext> Use(InstalledKernel kernel)

kernel InstalledKernel

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Use(InstalledKernelPool pool)

pool InstalledKernelPool

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Use<TKernel>() where TKernel : class

HookPipeline<TEvent, TContext>

TKernel

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)

package PluginPackage

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, IHookResult

package PluginPackage

handler Func<TEvent, ValueTask<TResult>>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

handler Func<TEvent, TContext, ValueTask<TResult>>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

handler Func<TEvent, CancellationToken, ValueTask<TResult>>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

handler Func<TEvent, TResult>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

handler Func<TEvent, TContext, TResult>

priority int

HookPipeline<TEvent, TContext>

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, IHookResult

package PluginPackage

priority int

HookPipeline<TEvent, TContext>

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)

kernel InstalledKernel

subscriptionId string

push RemoteLocalPush

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)

filterKernel InstalledKernel

subscriptionId string

resultType Type

request RemoteLocalResultRequest

priority int

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, IHookResult

filterKernel InstalledKernel

subscriptionId string

request RemoteLocalResultRequest

priority int

HookPipeline<TEvent, TContext>

TResult

public HookPipeline<TEvent, TContext> UseResult(InstalledKernel kernel, Type resultType, int priority = 0)

kernel InstalledKernel

resultType Type

priority int

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)

filter Func<TEvent, TContext, bool>

irFilter IRFunc<TEvent, TContext, bool>?

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)

filter Func<TEvent, TContext, ValueTask<bool>>

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)

filter Func<TEvent, bool>

irFilter IRFunc<TEvent, bool>?

HookPipeline<TEvent, TContext>

public HookPipeline<TEvent, TContext> Where(Func<TEvent, ValueTask<bool>> filter)

filter Func<TEvent, ValueTask<bool>>

HookPipeline<TEvent, TContext>