Esempio n. 1
0
 public static IImplementationTypeSelector RegisterHandlers(this IImplementationTypeSelector selector, Type type)
 {
     return(selector.AddClasses(c => c.AssignableTo(type))
            .UsingRegistrationStrategy(RegistrationStrategy.Append)
            .AsImplementedInterfaces()
            .WithScopedLifetime());
 }
 public static IImplementationTypeSelector AddAttributes(this IImplementationTypeSelector implementationTypeSelector)
 {
     return
         (implementationTypeSelector
          .AddClasses()
          .UsingAttributes());
 }
Esempio n. 3
0
 private static void AddTypes(this IImplementationTypeSelector selector)
 {
     selector
     .AddClasses(classes => classes.AssignableTo(typeof(IEventHandler <>)))
     .AsImplementedInterfaces()
     .WithTransientLifetime();
 }
        public static IImplementationTypeSelector InjectableAttributes(this IImplementationTypeSelector selector)
        {
            Enum.GetValues(typeof(ServiceLifetime))
            .Cast <ServiceLifetime>()
            .ForEach(item => selector = selector.InjectableAttribute(item));

            return(selector);
        }
 public static IImplementationTypeSelector AddSingletonInterfaces(this IImplementationTypeSelector implementationTypeSelector)
 {
     return
         (implementationTypeSelector
          .AddClasses(classes => classes.AssignableTo <ISingletonService>())
          .AsImplementedInterfaces()
          .WithSingletonLifetime());
 }
 public static IImplementationTypeSelector AddTransientInterfaces(this IImplementationTypeSelector implementationTypeSelector)
 {
     return
         (implementationTypeSelector
          .AddClasses(classes => classes.AssignableTo <ITransientService>())
          .AsImplementedInterfaces()
          .WithTransientLifetime());
 }
Esempio n. 7
0
        private static void AddLuigiTypes(this IImplementationTypeSelector selector)
        {
            selector
            .AddClasses(classes => classes.AssignableTo(typeof(IQueryPipeline <,>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(IQueryPipe <,>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(IQueryPipeline <, ,>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(IQueryPipe <, ,>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(IQueryHandler <,>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(ICommandPipeline <,>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(ICommandPipe <,>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(ICommandPipeline <>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(ICommandPipe <>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(ICommandHandler <>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(IEventPipeline <,>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(IEventPipe <,>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(IEventPipeline <>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
            .AddClasses(classes => classes.AssignableTo(typeof(IEventPipe <>)))
            .AsSelf()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo(typeof(IEventHandler <>)))
            .AsImplementedInterfaces()
            .WithTransientLifetime();
        }
 internal static IImplementationTypeSelector RegisterForLifetime(
     this IImplementationTypeSelector typeSelector,
     ServiceLifetime lifetime)
 {
     return(typeSelector
            .AddClasses(classes => classes.Filter(lifetime))
            .AsSelf()
            .AsImplementedInterfaces()
            .WithLifetime(lifetime));
 }
Esempio n. 9
0
        public static IImplementationTypeSelector InjectableAttributes(this IImplementationTypeSelector selector)
        {
            var lifeTimes = Enum.GetValues(typeof(ServiceLifetime)).Cast <ServiceLifetime>();

            foreach (var item in lifeTimes)
            {
                selector = selector.InjectableAttribute(item);
            }

            return(selector);
        }
Esempio n. 10
0
        private static void ScanModule(this IServiceCollection services, Func <ITypeSourceSelector, IImplementationTypeSelector> typeSelector)
        {
            //services.Scan(scan => typeSelector(scan).AddTransientInterfaces());
            //services.Scan(scan => typeSelector(scan).AddScopedInterfaces());
            //services.Scan(scan => typeSelector(scan).AddSingletonInterfaces());
            //services.Scan(scan => typeSelector(scan).AddAttributes());

            services.Scan(scan =>
            {
                IImplementationTypeSelector selector = typeSelector(scan);
                selector.AddTransientInterfaces();
                selector.AddScopedInterfaces();
                selector.AddSingletonInterfaces();
                selector.AddAttributes();
            });
        }
        private static IImplementationTypeSelector AddClassesFromInterfaces(this IImplementationTypeSelector selector)
        {
            //singleton
            selector.AddClasses(classes => classes.AssignableTo <ISingletonLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsMatchingInterface()
            .WithSingletonLifetime()

            .AddClasses(classes => classes.AssignableTo <ISelfSingletonLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsSelf()
            .WithSingletonLifetime()

            //transient
            .AddClasses(classes => classes.AssignableTo <ITransientLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsMatchingInterface()
            .WithTransientLifetime()

            .AddClasses(classes => classes.AssignableTo <ISelfTransientLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsSelf()
            .WithTransientLifetime()

            //scoped
            .AddClasses(classes => classes.AssignableTo <IScopedLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsMatchingInterface()
            .WithScopedLifetime()

            .AddClasses(classes => classes.AssignableTo <ISelfScopedLifetime>(), true)
            .UsingRegistrationStrategy(RegistrationStrategy.Skip)
            .AsSelf()
            .WithScopedLifetime();

            return(selector);
        }
Esempio n. 12
0
 /// <summary>
 /// Automatic validators discovery and automatic validation of commands/queries into the MediatR pipeline
 ///
 /// Shortcut that calls <see cref="AddValidators"/> and <see cref="AddValidationBehaviors"/>.
 /// </summary>
 /// <param name="selector">The selector used to scan for classes.</param>
 /// <returns>The selector.</returns>
 public static IImplementationTypeSelector AddValidatorsAndBehaviors(this IImplementationTypeSelector selector)
 {
     return(selector
            .AddValidators()
            .AddValidationBehaviors());
 }
Esempio n. 13
0
 /// <summary>
 /// Scans and registers all <see cref="IValidator{T}"/>.
 /// </summary>
 /// <param name="selector">The selector used to scan for classes.</param>
 /// <returns>The selector.</returns>
 public static IImplementationTypeSelector AddValidators(this IImplementationTypeSelector selector)
 {
     return(selector.AddClasses(classes => classes.AssignableTo(typeof(IValidator <>)))
            .AsImplementedInterfaces()
            .WithScopedLifetime());
 }
Esempio n. 14
0
 /// <summary>
 /// Registers all <see cref="ValidationBehavior{TRequest, TResponse}"/>
 /// that uses <see cref="IValidator{TRequest}"/>
 /// as MediatR <see cref="IPipelineBehavior{TRequest, TResponse}"/>.
 ///
 /// Automatic command and query validation should work as long there is a <see cref="IValidator{TRequest}"/> for the handler.
 /// </summary>
 /// <param name="selector">The selector used to scan for classes.</param>
 /// <returns>The selector.</returns>
 public static IImplementationTypeSelector AddValidationBehaviors(this IImplementationTypeSelector selector)
 {
     return(selector.AddClasses(classes => classes.AssignableTo(typeof(ValidationBehavior <,>)))
            .As(typeof(IPipelineBehavior <,>))
            .WithTransientLifetime());
 }
Esempio n. 15
0
 public static IImplementationTypeSelector InjectableAttribute(this IImplementationTypeSelector selector, ServiceLifetime lifeTime)
 {
     return(selector.AddClasses(c => c.WithAttribute <InjectableAttribute>(i => i.Lifetime == lifeTime))
            .AsImplementedInterfaces()
            .WithLifetime(lifeTime));
 }
Esempio n. 16
0
 public ServiceTypeSelector(IImplementationTypeSelector inner, IEnumerable <Type> types)
 {
     Inner = inner;
     Types = types;
 }
Esempio n. 17
0
 public ServiceTypeSelector(IImplementationTypeSelector implementationTypeSelector, IEnumerable <Type> types)
 {
     ImplementationTypeSelector = implementationTypeSelector;
     Types     = types;
     Selectors = new List <ISelector>();
 }