Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.DependencyInjection is a standard DI implementation developed in the dotnet/runtime repository, and is also an abstract layer for DI. It is very common in .NET environments, including server-side.
By installing the VitalRouter.Extensions.DependencyInjection package, you can use the following features that use VitalRouter from Microsoft.Extensions.DependencyInjection.
using VitalRouter;
// Example of using Generic Host
var builder = Host.CreateApplicationBuilder();
builder.Services.AddVitalRouter(routing =>
{
// Map all `[Routes]` targets in the specified assembly.
routing.MapAll(GetType().Assembly);
// Map specific class.
routing.Map<FooPresenter>();
});
Resolving
The instances mapped here are released with to dispose of the DI container.
In this case, publisher is also injectable.
Resolving
If AddVitalRouter
is set, Router
, its interface, ICommandPublisher
and ICommandSubscriber
can be retrieved from the DI container.
class HogeController
{
readonly ICommandPublisher publisher;
// Resolve `ICommandPublisher`
public HogeController(ICommandPublisher publisher)
{
this.publisher = publisher;
}
public void DoSomething()
{
publisher.PublishAsync(new FooCommand { X = 1, Y = 2 }).Forget();
}
}
public class HogePresenter
{
// Resolve `ICommandSubscribable`
public FooController(ICommandSubscribable subscribable)
{
subscribable.Subscribe((cmd, ctx) => { /* ... */ });
}
}
Ordering
By setting the Ordering
property, you can set the order control for the Routers you register here.
builder.Services.AddVitalRouter(routing =>
{
// ...
routing.Ordering = CommandOrdering.Sequential;
// ...
});
For more information about CommandOrdering
, please refer to the Sequential control section.
Filters
You can use the Filters
property to add Interceptors
that apply to this scope.
builder.Services.AddVitalRouter(routing =>
{
// ...
routing.Filters.Add<Filter1>();
// ...
});
It is convenient to set up the Filter via DI, as this automates the instantiation of the Interceptor and dependency resolution.
For more information about Interceptors, please refer to the Interceptor section.