コード例 #1
0
        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);
コード例 #2
0
 public static IServicesBuilder AddLogger(this IServicesBuilder builder, Action <ILoggerOptionsBuilder> loggerConfigurator) =>
 builder.AddServices(services =>
 {
     var loggerBuilder = new LoggerOptionsBuilder(services);
     loggerConfigurator.Invoke(loggerBuilder);
 }, ServiceType.Logger);