---
url: https://node-ts.github.io/bus/api/bus-core/classes/MiddlewareDispatcher.md
---
[API reference](../../index.md) / [@node-ts/bus-core](../index.md) / MiddlewareDispatcher

# Class: MiddlewareDispatcher\<T>

Defined in: [packages/bus-core/src/util/middleware.ts:19](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L19)

A middleware container and invoker

## Type Parameters

| Type Parameter |
| ------ |
| `T` |

## Constructors

### Constructor

```ts
new MiddlewareDispatcher<T>(finalMiddlewares?): MiddlewareDispatcher<T>;
```

Defined in: [packages/bus-core/src/util/middleware.ts:22](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L22)

#### Parameters

| Parameter | Type | Default value |
| ------ | ------ | ------ |
| `finalMiddlewares` | [`Middleware`](../type-aliases/Middleware.md)<`T`>\[] | `[]` |

#### Returns

`MiddlewareDispatcher`<`T`>

## Properties

| Property | Modifier | Type | Default value | Defined in |
| ------ | ------ | ------ | ------ | ------ |
| <a id="property-finalmiddlewares"></a> `finalMiddlewares` | `readonly` | [`Middleware`](../type-aliases/Middleware.md)<`T`>\[] | `[]` | [packages/bus-core/src/util/middleware.ts:22](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L22) |
| <a id="property-middlewares"></a> `middlewares` | `public` | [`Middleware`](../type-aliases/Middleware.md)<`T`>\[] | `[]` | [packages/bus-core/src/util/middleware.ts:20](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L20) |

## Methods

### dispatch()

```ts
dispatch(context): Promise<void>;
```

Defined in: [packages/bus-core/src/util/middleware.ts:45](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L45)

Execute the chain of middlewares, in the order they were added on a
given Context.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | `T` |

#### Returns

`Promise`<`void`>

***

### use()

```ts
use(...middlewares): void;
```

Defined in: [packages/bus-core/src/util/middleware.ts:27](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L27)

Add a middleware function.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| ...`middlewares` | [`Middleware`](../type-aliases/Middleware.md)<`T`>\[] |

#### Returns

`void`

***

### useFinal()

```ts
useFinal(...middlewares): void;
```

Defined in: [packages/bus-core/src/util/middleware.ts:37](https://github.com/node-ts/bus/blob/2e6cf65c27833b707ae31ee623cfb6343770f434/packages/bus-core/src/util/middleware.ts#L37)

Add 'final' middlewares that will be added to the end of the
regular middlewares. This allows for finer control when exposing
the

#### Parameters

| Parameter | Type |
| ------ | ------ |
| ...`middlewares` | [`Middleware`](../type-aliases/Middleware.md)<`T`>\[] |

#### Returns

`void`

#### See

use functionality to consumers but wanting to ensure that your
final middleware is last to run
