Skip to content

Integration with IServiceCollection

Kirill edited this page Jun 6, 2020 · 17 revisions

NuGet NuGet

Install package from nugget

For integration with Microsoft IServiceCollection, install package from NuGet:

Install-Package Velo.Extensions.DependencyInjection

Add emitter (mediator or CQRS functionality)

Emitter is main class for routing your commands, queries or notification.

var serviceCollection = new ServiceCollection()
      .AddEmitter()
      .AddQueryBehaviour<QueryBehaviour>(ServiceLifetime.Scoped)
      .AddQueryProcessor<QueryProcessor>() // also added pre/post processor
      .AddCommandBehaviour<CommandBehaviour<Command>>() // default lifetime - singleton
      .AddScoped(typeof(ICommandBehaviour<>), typeof(CommandBehaviour<>)) // or configure
      .AddCommandProcessor<CommandProcessor>() // also added pre/post-processor
      .AddNotificationProcessor<NotificationProcessor>()

Add json converter

var serviceCollection = new ServiceCollection()
      .AddJsonConverter();

Add logger

var serviceCollection = new ServiceCollection()
      .AddLogging()
      .AddDefaultConsoleLogWriter(LogLevel.Warning)  // write warning logs to console output
      .AddDefaultLogEnrichers()                      // log level, timestamp, sender

Add simple mapper

var serviceCollection = new ServiceCollection()
      .AddMapper();

Build DependencyProvider from IServiceCollection

All service descriptors can be cloned to DependencyProvider.

DependencyProvider dependencyProvider = new ServiceCollection()
      .AddEmitter()
      .AddJsonConverter()
      ...
      .BuildDependencyProvider();

You can build DependencyProvider as service to IServiceCollection.

IServiceProvider serviceProvider = new ServiceCollection()
      .AddDependencyProvider(dependencies => dependencies
            .AddEmitter())
      .BuildServiceProvider();

var dependencyProvider = serviceProvider.GetRequiredService<DependencyProvider>();
var yourClass = dependencyProvider.Activate<YourClass>();

Now, you can use full functionality of DependencyProvider inside your IServiceProvider.