public static IServicesBuilder AddEvenets(this IServicesBuilder serviceBuilder, Action <IEventOptionsBuilder> configurator) => serviceBuilder.AddServices(services => { var eventBuilder = new EventOptionsBuilder(); configurator.Invoke(eventBuilder); var eventOptions = eventBuilder.Build(); foreach (var o in eventOptions) { if (o.ConsumerType != null && !o.ConsumerType.IsInterface) { services.AddScoped(o.ConsumerType); } if (o.ConverterType == null) { throw new EventConfigurationException(o.EventName, o.EventType, $"Converter for '{o.EventName}' event not configured, this configuration is necessary."); } if (!o.ConverterType.IsInterface) { services.AddScoped(o.ConverterType); } } services.AddSingleton(serviceProvider => { StaticCache.EventProvider = new EventProvider( serviceProvider, serviceProvider.GetRequiredService <ITopicPattenBuilder>(), eventOptions, serviceProvider.GetRequiredService <IEventBusLogger <EventProvider> >()); return(StaticCache.EventProvider); }); }, ServiceType.Event);
public static IServicesBuilder AddLogger(this IServicesBuilder builder, Action <ILoggerOptionsBuilder> loggerConfigurator) => builder.AddServices(services => { var loggerBuilder = new LoggerOptionsBuilder(services); loggerConfigurator.Invoke(loggerBuilder); }, ServiceType.Logger);