.. _refProviders:
#########
Providers
#########
In Mediate a provider is the responsible for provide the message handlers and the middlewares.
Default Providers
=================
Mediate includes the following providers out-of-the-box.
.. _refHandlerProviders:
Service Provider Handler Provider
---------------------------------
Provides the events and queries handlers from the DI Container.
.. note::
The handlers are retrieved in the same registration order.
.. _refMiddlewareProviders:
Service Provider Middleware Provider
------------------------------------
Provides the events and queries middlewares from the DI Container.
.. note::
The middlewares are retrieved in the same registration order.
.. _refCustomHandlerProviders:
Custom Handler Provider
=======================
You can create a custom provider for the handlers to provide handlers in any form you want.
For this purpose you have to implement the ``IHandlerProvider`` interface with your custom logic.
.. sourcecode:: csharp
///
/// Defines a provider that encapsulates event and query handlers provider
///
public interface IHandlerProvider : IEventHandlerProvider, IQueryHandlerProvider
{
}
The above interface is segregated in ``IEventHandlerProvider`` and ``IQueryHandlerProvider`` for more flexibility.
.. sourcecode:: csharp
///
/// Interface for implement an event handler provider
///
public interface IEventHandlerProvider
{
///
/// Gets all event handlers from an event
///
/// Event type
/// All registered handlers for that event
Task>> GetHandlers() where TEvent : IEvent;
}
///
/// Interface for implement a query handler provider
///
public interface IQueryHandlerProvider
{
///
/// Gets a query handler from a concrete query
///
/// Query type
/// Query response type
/// Registered handler for that query
Task> GetHandler() where TQuery : IQuery;
}
To register your custom implementation you can use the ``AddCustomHandlerProvider`` advanced configuration method.
See :ref:`Advanced configuration `
.. _refCustomMiddlewareProviders:
Custom Middleware Provider
==========================
You can create a custom provider for the middlewares to provide middlewares in any form you want.
For this purpose you have to implement the ``IMiddlewareProvider`` interface with your custom logic.
.. sourcecode:: csharp
///
/// Defines a provider that encapsulates event and query middlewares provider
///
public interface IMiddlewareProvider : IEventMiddlewareProvider, IQueryMiddlewareProvider
{
}
The above interface is segregated in ``IEventMiddlewareProvider`` and ``IQueryMiddlewareProvider`` for more flexibility.
.. sourcecode:: csharp
///
/// Interface for implement an event middleware provider
///
public interface IEventMiddlewareProvider
{
///
/// Gets all event middlewares from an event
///
/// Event type
/// All registered middlewares for that event
Task>> GetMiddlewares() where TEvent : IEvent;
}
///
/// Interface for implement a query middleware provider
///
public interface IQueryMiddlewareProvider
{
///
/// Gets all query middlewares from a query
///
/// Query type
/// Query response type
/// All registered middlewares for that query
Task>> GetMiddlewares() where TQuery : IQuery;
}
To register your custom implementation you can use the ``AddCustomMiddlewareProvider`` advanced configuration method.
See :ref:`Advanced configuration `