示例#1
0
        /// <summary>
        /// Registers mediatr to net core DI without relying on reflection.
        /// </summary>
        /// <param name="services">.Net Core services collection to register mediatr to.</param>
        /// <param name="logger">Instance of logging framework.</param>
        /// <param name="serviceConfiguration">The mediatr service configuration.</param>
        /// <param name="mediatrRegistration">
        /// The mediatr explicit registration details.
        /// This is the part specific to this functionality to avoid reflection.
        /// The object contains all the relevant details compiled up front.
        /// </param>
        public static void RegisterMediatrWithExplicitTypes(
            IServiceCollection services,
            ILogger?logger,
            MediatRServiceConfiguration serviceConfiguration,
            IMediatrRegistration mediatrRegistration)
        {
            if (mediatrRegistration == null)
            {
                throw new ArgumentNullException(nameof(mediatrRegistration));
            }

            Register(
                services,
                logger,
                mediatrRegistration.RequestHandlers);

            Register(
                services,
                logger,
                mediatrRegistration.NotificationHandlers);

            Register(
                services,
                logger,
                mediatrRegistration.RequestPreProcessors);

            Register(
                services,
                logger,
                mediatrRegistration.RequestPostProcessors);

            MediatR.Registration.ServiceRegistrar.AddRequiredServices(services, serviceConfiguration);
        }
示例#2
0
 public static void AddRequiredServices(IServiceCollection services, MediatRServiceConfiguration serviceConfiguration)
 {
     services.AddTransient <ServiceFactory>(p => p.GetService);
     services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestPreProcessorBehavior <,>));
     services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestPostProcessorBehavior <,>));
     services.Add(new ServiceDescriptor(typeof(IMediator), serviceConfiguration.MediatorImplementationType, serviceConfiguration.Lifetime));
 }
        /// <summary>
        /// Uses MediatR.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="serviceConfig">The MediatR service configuration.</param>
        /// <returns>IServiceConventionContext.</returns>
        public static IServiceConventionContext UseMediatR(
            this IServiceConventionContext builder,
            MediatRServiceConfiguration serviceConfig
            )
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (serviceConfig is null)
            {
                throw new ArgumentNullException(nameof(serviceConfig));
            }

            if (builder.Services.Any(z => z.ServiceType == typeof(IMediator)))
            {
                return(builder);
            }

            builder.Set(serviceConfig);
            var assemblies = builder.AssemblyCandidateFinder
                             .GetCandidateAssemblies(nameof(MediatR)).ToArray();

            ServiceRegistrar.AddRequiredServices(builder.Services, serviceConfig);
            ServiceRegistrar.AddMediatRClasses(builder.Services, assemblies);
            return(builder);
        }
        public static void AddLeeliteCore(this IServiceCollection services)
        {
            services.AddMapper();

            var serviceConfig = new MediatRServiceConfiguration();

            serviceConfig.AsScoped();

            ServiceRegistrar.AddRequiredServices(services, serviceConfig);
        }
示例#5
0
        public static void AddRequiredServices(IServiceCollection services, MediatRServiceConfiguration serviceConfiguration)
        {
            // Use TryAdd, so any existing ServiceFactory/IMediator registration doesn't get overriden
            services.TryAddTransient <ServiceFactory>(p => p.GetService);
            services.TryAdd(new ServiceDescriptor(typeof(IMediator), serviceConfiguration.MediatorImplementationType, serviceConfiguration.Lifetime));

            // Use TryAddTransientExact (see below), we dó want to register our Pre/Post processor behavior, even if (a more concrete)
            // registration for IPipelineBehavior<,> already exists. But only once.
            services.TryAddTransientExact(typeof(IPipelineBehavior <,>), typeof(RequestPreProcessorBehavior <,>));
            services.TryAddTransientExact(typeof(IPipelineBehavior <,>), typeof(RequestPostProcessorBehavior <,>));
            services.TryAddTransientExact(typeof(IPipelineBehavior <,>), typeof(RequestExceptionActionProcessorBehavior <,>));
            services.TryAddTransientExact(typeof(IPipelineBehavior <,>), typeof(RequestExceptionProcessorBehavior <,>));
        }
示例#6
0
        /// <summary>
        /// Adds MediatR.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="serviceConfig">The MediatR service configuration.</param>
        /// <returns>IConventionHostBuilder.</returns>
        public static IConventionHostBuilder UseMediatR(
            this IConventionHostBuilder builder,
            MediatRServiceConfiguration serviceConfig
            )
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (serviceConfig is null)
            {
                throw new ArgumentNullException(nameof(serviceConfig));
            }

            builder.Set(serviceConfig);
            builder.Scanner.PrependConvention <MediatRConvention>();
            return(builder);
        }