示例#1
0
 public static IServiceCollection AddApplication(this IServiceCollection services)
 {
     services.AddAutoMapper(Assembly.GetExecutingAssembly());
     services.AddMediatR(Assembly.GetExecutingAssembly());
     services.AddTransient(typeof(IPipelineBehavior <,>), typeof(ValidationBehavior <,>));
     AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly()).ForEach(item => services.AddScoped(item.InterfaceType, item.ValidatorType));
     return(services);
 }
示例#2
0
        public void FindValidatorsInAssembly_When_Instructed_Should_Find_Internal_Types()
        {
            var scanner = AssemblyScanner.FindValidatorsInAssembly(GetType().Assembly, true);
            var results = new List <AssemblyScanner.AssemblyScanResult>();

            scanner.ForEach(x => results.Add(x));
            Assert.Contains(results, o => o.ValidatorType == typeof(Model1InternalValidator));
        }
示例#3
0
        public void FindValidatorsInAssembly_By_Default_Should_Not_Find_Internal_Types()
        {
            var scanner = AssemblyScanner.FindValidatorsInAssembly(GetType().Assembly);
            var results = new List <AssemblyScanner.AssemblyScanResult>();

            scanner.ForEach(x => results.Add(x));
            Assert.DoesNotContain(results, o => o.ValidatorType == typeof(Model1InternalValidator));
        }
示例#4
0
        /// <summary>
        /// Append validator services to the service collection
        /// </summary>
        /// <param name="services">Target service collection for the validator service</param>
        /// <returns>Service collection containing the validator service</returns>
        public static IServiceCollection RegisterValidators(this IServiceCollection services)
        {
            var assembly = Assembly.GetExecutingAssembly();
            var scanner  = AssemblyScanner.FindValidatorsInAssembly(assembly);

            scanner.ForEach(x => services.AddSingleton(x.InterfaceType, x.ValidatorType));
            return(services);
        }
示例#5
0
        private static void AddValidators(IServiceCollection services, string applicationAssemblyName)
        {
            var assembly = AppDomain.CurrentDomain.Load(applicationAssemblyName);

            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
        }
示例#6
0
 public static void RegisterFluentValidators(this ContainerBuilder builder, Assembly assembly)
 {
     AssemblyScanner.FindValidatorsInAssembly(assembly).ForEach(
         result =>
     {
         builder.RegisterType(result.ValidatorType).As(result.InterfaceType);
     });
 }
        /// <summary>
        /// Adds all validators in specified assembly
        /// </summary>
        /// <param name="services">The collection of services</param>
        /// <param name="assembly">The assembly to scan</param>
        /// <param name="lifetime">The lifetime of the validators. The default is transient</param>
        /// <returns></returns>
        public static IServiceCollection AddValidatorsFromAssembly(this IServiceCollection services, Assembly assembly, ServiceLifetime lifetime = ServiceLifetime.Transient)
        {
            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(scanResult => services.AddScanResult(scanResult, lifetime));

            return(services);
        }
示例#8
0
        public static void AddMediatR(this IServiceCollection services)
        {
            AssemblyScanner.FindValidatorsInAssembly(typeof(RequestValidationBehavior <,>).Assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));

            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestValidationBehavior <,>));
            services.AddMediatR(typeof(GetLatestMaterialsQuery).Assembly);
        }
示例#9
0
        public static void AddRbkApiCommentsModule(this IServiceCollection services)
        {
            services.RegisterApplicationServices(Assembly.GetAssembly(typeof(ICommentsService)));

            AssemblyScanner
            .FindValidatorsInAssembly(Assembly.GetAssembly(typeof(CommentEntity.Command)))
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
        }
示例#10
0
        public static void AdicionarValidadoresFluentValidation(this IServiceCollection services)
        {
            var assembly = AppDomain.CurrentDomain.Load("SME.AE.Aplicacao");

            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
        }
示例#11
0
        public static IServiceCollection AddFluentValidation(this IServiceCollection services)
        {
            AssemblyScanner
            .FindValidatorsInAssembly(typeof(GetPaymentQueryValidator).Assembly)
            .ForEach(item => services.AddScoped(item.InterfaceType, item.ValidatorType));

            return(services);
        }
示例#12
0
        public void ConfigureServices(IServiceCollection services)
        {
            ValidatorOptions.PropertyNameResolver = CamelCasePropertyNameResolver.ResolvePropertyName;

            var applicationLayerAssembly = typeof(ApplicationLayerAssembly).Assembly;

            services.AddOptions();
            services.AddMemoryCache();
            services.AddLocalization();

            services.Configure <ApiBehaviorOptions>(options =>
            {
                options.SuppressModelStateInvalidFilter = true;
            });

            services.AddMvcCore()
            .AddFormatterMappings()
            .AddJsonFormatters(settings =>
            {
                settings.ContractResolver           = new CamelCasePropertyNamesContractResolver();
                settings.DateFormatHandling         = DateFormatHandling.IsoDateFormat;
                settings.DateParseHandling          = DateParseHandling.DateTimeOffset;
                settings.PreserveReferencesHandling = PreserveReferencesHandling.None;
                settings.ReferenceLoopHandling      = ReferenceLoopHandling.Ignore;
                settings.Formatting = Formatting.Indented;
                settings.Converters.Add(new StringEnumConverter());
            })
            .AddApiExplorer()
            .AddCors()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddDbContextPool <ExampleContext>(options =>
            {
                options.UseSqlite(Configuration.GetConnectionString("ExampleSqlite"));
                //options.UseSqlServer(Configuration.GetConnectionString("ExampleSqlServer"));
                //options.UseInMemoryDatabase(Guid.NewGuid().ToString());
            });

            services.AddOpenSpecificationApi(Configuration);

            services.AddMiniProfiler(options =>
            {
                options.RouteBasePath = "/profiler";
                options.SqlFormatter  = new SqlServerFormatter();
                options.ShouldProfile = request =>
                                        Configuration.GetSection("MiniProfiler").GetValue <bool?>("Enable") ?? true;
            }).AddEntityFramework();

            // Os Pipelines Behaviors são executados na respectiva ordem que são adicionados no Container.
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestPreProcessorBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(DurationBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestValidationBehavior <,>));
            services.AddMediatR(applicationLayerAssembly);

            AssemblyScanner
            .FindValidatorsInAssembly(applicationLayerAssembly)
            .ForEach(e => services.AddTransient(e.InterfaceType, e.ValidatorType));
        }
 public static void RegisterValidators(IServiceCollection services)
 {
     AssemblyScanner
     .FindValidatorsInAssembly(typeof(HandlersDiConfig).GetTypeInfo().Assembly)
     .ForEach(pair =>
     {
         services.Add(ServiceDescriptor.Transient(pair.InterfaceType, pair.ValidatorType));
     });
 }
示例#14
0
        public static void AddValidatorsFromAssembly(IServiceCollection services, Assembly assembly)
        {
            var scanner = AssemblyScanner.FindValidatorsInAssembly(assembly);

            foreach (var result in scanner)
            {
                services.AddTransient(result.InterfaceType, result.ValidatorType);
            }
        }
示例#15
0
 private static void RegisterValidators(ContainerBuilder builder)
 {
     AssemblyScanner.FindValidatorsInAssembly(typeof(ThingCommand).Assembly)
     .ForEach(
         result =>
     {
         builder.RegisterType(result.ValidatorType).As(result.InterfaceType).InstancePerLifetimeScope();
     });
 }
示例#16
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var appSettingsSection = Configuration.GetSection("AppSettings");

            services.TryAddSingleton <IResponseCompressionProvider, ResponseCompressionProvider>();

            services.AddTransient <INotificationService, NotificationService>();
            services.AddTransient <CryptoHelper, CryptoHelper>();
            services.AddSingleton <IJwtManager, JwtManager>();

            services.AddScoped <IFinancesDbContext, FinancesDbContext>();

            AddValidatorsInjection(services);
            ConfigureAutoMapper(services);

            services
            .Configure <AppSettings>(appSettingsSection)
            .AddAutoMapper()
            .AddMediatR()
            .AddCors()
            .AddMvc().ConfigureApiBehaviorOptions(options =>
            {
                options.SuppressModelStateInvalidFilter = true;
            })
            .AddFluentValidation()
            .AddJsonOptions(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            const string applicationAssemblyName = "Finances.Core";
            var          assembly = AppDomain.CurrentDomain.Load(applicationAssemblyName);

            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));

            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(ValidationBehavior <,>));

            var appSettings = appSettingsSection.Get <AppSettings>();
            var key         = Encoding.ASCII.GetBytes(appSettings.JwtSecret);

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.SaveToken                 = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(key),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    RequireExpirationTime    = false
                };
            });
        }
        public static IServiceCollection AddBehaviorsConfig(this IServiceCollection services)
        {
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(ValidationRequestBehavior <,>));

            AssemblyScanner
            .FindValidatorsInAssembly(Assembly.GetExecutingAssembly())
            .ForEach(x => services.AddScoped(x.InterfaceType, x.ValidatorType));

            return(services);
        }
示例#18
0
 private void InyeccionFluentValidations(IServiceCollection services)
 {
     AssemblyScanner.FindValidatorsInAssembly(Assembly.Load("Application")).ForEach(pair =>
     {
         // RegisterValidatorsFromAssemblyContaing does this:
         services.Add(ServiceDescriptor.Scoped(pair.InterfaceType, pair.ValidatorType));
         // Also register it as its concrete type as well as the interface type
         services.Add(ServiceDescriptor.Scoped(pair.ValidatorType, pair.ValidatorType));
     });
 }
示例#19
0
        private static void AddMediatr(IServiceCollection services)
        {
            var assembly = AppDomain.CurrentDomain.Load("SocialHeroes.Domain");;

            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));

            services.AddMediatR(typeof(Startup).Assembly);
        }
示例#20
0
 private void FluentValidationConfig()
 {
     AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly())
     .ForEach(result =>
     {
         For(result.InterfaceType)
         .Singleton()
         .Use(result.ValidatorType);
     });
 }
        public static void RegisterCommand(this IServiceCollection services)
        {
            var commandAssembly = typeof(CommandResult).GetTypeInfo().Assembly;

            AssemblyScanner
            .FindValidatorsInAssembly(commandAssembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(CommandValidationBehavior <,>));
            services.AddMediatR(typeof(CommandResult), typeof(IHandler <,>));
        }
示例#22
0
        private static void RegisterApiController(IKernel kernel)
        {
            kernel.Bind <IConfigurationManager>().To <RestConfigurationManager>();

            AssemblyScanner
            .FindValidatorsInAssembly(typeof(ApiController).Assembly)
            .ForEach(result => kernel.Bind(result.InterfaceType)
                     .To(result.ValidatorType)
                     .InRequestScope());
        }
示例#23
0
        public void ConfigureFailFast(IServiceCollection services)
        {
            var applicationAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
            var assembly = AppDomain.CurrentDomain.Load(applicationAssemblyName);

            AssemblyScanner
            .FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(FailFastRequestBehavior <,>));
        }
示例#24
0
 /// <summary>
 /// Adds all validators in specified assembly
 /// </summary>
 /// <param name="services">The collection of services</param>
 /// <param name="assembly">The assembly to scan</param>
 /// <param name="lifetime">The lifetime of the validators. The default is transient</param>
 /// <param name="filter">Optional filter that allows certain types to be skipped from registration.</param>
 /// <returns></returns>
 public static IServiceCollection AddValidatorsFromAssembly(this IServiceCollection services,
                                                            Assembly assembly,
                                                            ServiceLifetime lifetime = ServiceLifetime.Transient,
                                                            Func <AssemblyScanner.AssemblyScanResult, bool> filter = null)
 {
     foreach (var scanResult in AssemblyScanner.FindValidatorsInAssembly(assembly).Where(filter ?? (_ => true)))
     {
         services.AddValidator(scanResult.ValidatorType);
     }
     return(services);
 }
示例#25
0
        /// <summary>
        /// Registra o MediatR no injetor de dependências
        /// </summary>
        /// <param name="services">Instância do injetor de dependências</param>
        /// <param name="configuration">Instância das configurações da aplicação</param>
        public static void AddMediatR(this IServiceCollection services, IConfiguration configuration)
        {
            var assemblyName = configuration.GetValue <string>("CommandSettings:Assembly");

            AssemblyScanner
            .FindValidatorsInAssembly(Assembly.Load(new AssemblyName(assemblyName)))
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));

            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(FluentValidationMiddleware <,>));
            services.AddMediatR();
        }
 public static IServiceCollection AddRequestValidators(this IServiceCollection services, Assembly assembly)
 {
     AssemblyScanner.FindValidatorsInAssembly(assembly)
     .ForEach(pair =>
     {
         services.AddTransient(typeof(IValidator), pair.ValidatorType);
         services.AddTransient(pair.InterfaceType, pair.ValidatorType);
     });
     services.AddTransient <IValidatorProvider, ValidatorProvider>();
     return(services);
 }
示例#27
0
        public static IServiceCollection AddApplication(this IServiceCollection services)
        {
            AssemblyScanner.FindValidatorsInAssembly(typeof(DependencyInjection).Assembly).ForEach(item => services.AddScoped(item.InterfaceType, item.ValidatorType));

            services.AddMediatR(Assembly.GetExecutingAssembly());
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(LoggingBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(ValidatorBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(TransactionBehaviour <,>));

            return(services);
        }
示例#28
0
 /// <summary>
 /// Load your modules or register your services here!
 /// </summary>
 /// <param name="kernel">The kernel.</param>
 private static void RegisterServices(IKernel kernel)
 {
     AssemblyScanner.FindValidatorsInAssembly(Assembly.GetAssembly(typeof(CourseValidator)))
     .ForEach(match => kernel.Bind(match.InterfaceType).To(match.ValidatorType));
     AssemblyScanner.FindValidatorsInAssembly(Assembly.GetAssembly(typeof(CreateCourseViewModelValidator)))
     .ForEach(match => kernel.Bind(match.InterfaceType).To(match.ValidatorType));
     kernel.Bind(typeof(IRepository <>)).To(typeof(EfRepository <>));
     kernel.Bind <IAcademyPlatformDbContext>().To <AcademyPlatformDbContext>();
     kernel.Bind(x => x.FromAssemblyContaining <CoursesService>().SelectAllClasses().BindDefaultInterfaces());
     kernel.Bind <IHtmlSanitizer>().To <HtmlSanitizer>();
 }
示例#29
0
        public static IServiceCollection AddMediatRConfigurations(this IServiceCollection services)
        {
            Assembly assembly = AppDomain.CurrentDomain.Load("IHolder.Application");

            AssemblyScanner.FindValidatorsInAssembly(assembly)
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(FailFastRequestBehavior <,>));
            services.AddMediatR(typeof(Startup));
            services.AddMediatR(assembly);
            return(services);
        }
示例#30
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            //services.AddFluentValidation();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "WebJetMovies", Version = "v1"
                });
            });

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAny",
                                  builder =>
                {
                    builder.WithOrigins("*");
                });
            });


            AssemblyScanner
            .FindValidatorsInAssembly(Assembly.GetExecutingAssembly())
            .ForEach(result => services.AddScoped(result.InterfaceType, result.ValidatorType));

            services.AddMediatR(Assembly.GetExecutingAssembly());
            services.AddHttpClient <IHttpClientWrapper, HttpClientWrapper>((client) =>
            {
                //Token that is retrieved from environment variables (not included in GitHub
                //and not sent to the UI for security. Instead app service has it set as an env variable)
                client.DefaultRequestHeaders.Add(ApiConstants.RequestHeaders.AccessTokenHeaderName, Configuration[ApiConstants.ConfigurationNames.AccessToken]);

                Uri.TryCreate(Configuration[ApiConstants.ConfigurationNames.ApiServerAddress], UriKind.Absolute, out Uri baseAddress);

                client.BaseAddress = baseAddress;
                client.Timeout     = TimeSpan.FromSeconds(double.Parse(Configuration[ApiConstants.ConfigurationNames.MaxDurationOfClientRequest]));
            }).SetHandlerLifetime(TimeSpan.FromMinutes(5))
            .AddPolicyHandler(RetryPolicy.GetRetryPolicy());

            services.AddScoped <IMovieApiClient, MovieApiClient>();

            services.Configure <MovieApiUris>(Configuration.GetSection(ApiConstants.ConfigurationNames.MovieApiUris));
            services.Configure <ApiRequestDetails>(Configuration.GetSection(ApiConstants.ConfigurationNames.ApiRequestDetails));

            services.AddApiVersioning(config =>
            {
                config.DefaultApiVersion = new ApiVersion(1, 0);
                config.AssumeDefaultVersionWhenUnspecified = true;
                config.ReportApiVersions = true;
                config.ApiVersionReader  = new HeaderApiVersionReader("api-version");
            });

            services.AddSingleton(Log.Logger);
        }