Exemple #1
0
        public static IUkiyoBuilder AddSwaggerDocs(this IUkiyoBuilder builder, SwaggerOptions options)
        {
            if (!options.Enabled || !builder.TryRegister(RegistryName))
            {
                return(builder);
            }

            builder.Services.AddSingleton(options);
            builder.Services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc(options.Name, new OpenApiInfo {
                    Title = options.Title, Version = options.Version
                });
                if (options.IncludeSecurity)
                {
                    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                    {
                        Description =
                            "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                        Name = "Authorization",
                        In   = ParameterLocation.Header,
                        Type = SecuritySchemeType.ApiKey
                    });
                }
            });

            return(builder);
        }
Exemple #2
0
        public static IUkiyoBuilder AddSwaggerDocs(this IUkiyoBuilder builder,
                                                   Func <ISwaggerOptionsBuilder, ISwaggerOptionsBuilder> buildOptions)
        {
            var options = buildOptions(new SwaggerOptionsBuilder()).Build();

            return(builder.AddSwaggerDocs(options));
        }
Exemple #3
0
        public static IUkiyoBuilder AddRedis(this IUkiyoBuilder builder,
                                             Func <IRedisOptionsBuilder, IRedisOptionsBuilder> buildOptions)
        {
            var options = buildOptions(new RedisOptionsBuilder()).Build();

            return(builder.AddRedis(options));
        }
Exemple #4
0
        public static IUkiyoBuilder AddErrorHandler <T>(this IUkiyoBuilder builder)
            where T : class, IExceptionToResponseMapper
        {
            builder.Services.AddTransient <ErrorHandlerMiddleware>();
            builder.Services.AddSingleton <IExceptionToResponseMapper, T>();

            return(builder);
        }
Exemple #5
0
 public static TModel GetOptions <TModel>(this IUkiyoBuilder builder, string settingsSectionName)
     where TModel : new()
 {
     using (var serviceProvider = builder.Services.BuildServiceProvider())
     {
         var configuration = serviceProvider.GetService <IConfiguration>();
         return(configuration.GetOptions <TModel>(settingsSectionName));
     }
 }
Exemple #6
0
        public static IUkiyoBuilder AddWebApiSwaggerDocs(this IUkiyoBuilder builder, string sectionName = SectionName)
        {
            if (string.IsNullOrWhiteSpace(sectionName))
            {
                sectionName = SectionName;
            }

            return(builder.AddWebApiSwaggerDocs(b => b.AddSwaggerDocs(sectionName)));
        }
Exemple #7
0
        public static IUkiyoBuilder AddWebApi(this IUkiyoBuilder builder, Action <IMvcCoreBuilder> configureMvc, IJsonSerializer jsonSerializer = null,
                                              string sectionName = SectionName)
        {
            if (string.IsNullOrWhiteSpace(sectionName))
            {
                sectionName = SectionName;
            }

            if (!builder.TryRegister(RegistryName))
            {
                return(builder);
            }

            if (jsonSerializer is null)
            {
                var factory = new JsonSerializerFactory(StandardResolver.AllowPrivateCamelCase);
                JsonSerializer.SetDefaultResolver(new UkiyoFormatterResolver());
                jsonSerializer = factory.GetSerializer();
            }

            builder.Services.AddSingleton(jsonSerializer);
            builder.Services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            builder.Services.AddSingleton(new WebApiEndpointDefinitions());
            var options = builder.GetOptions <WebApiOptions>(sectionName);

            builder.Services.AddSingleton(options);
            _bindRequestFromRoute = options.BindRequestFromRoute;

            var mvcCoreBuilder = builder.Services
                                 .AddLogging()
                                 .AddMvcCore();

            mvcCoreBuilder.AddMvcOptions(o =>
            {
                var resolver = CompositeResolver.Create(EnumResolver.Default, StandardResolver.AllowPrivateCamelCase);
                o.OutputFormatters.Clear();
                o.OutputFormatters.Add(new JsonOutputFormatter(resolver));
                o.InputFormatters.Clear();
                o.InputFormatters.Add(new JsonInputFormatter(resolver));
            })
            .AddDataAnnotations()
            .AddApiExplorer()
            .AddAuthorization();

            configureMvc?.Invoke(mvcCoreBuilder);

            builder.Services.Scan(s =>
                                  s.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies())
                                  .AddClasses(c => c.AssignableTo(typeof(IRequestHandler <,>)))
                                  .AsImplementedInterfaces()
                                  .WithTransientLifetime());

            builder.Services.AddTransient <IRequestDispatcher, RequestDispatcher>();

            return(builder);
        }
Exemple #8
0
        public static IUkiyoBuilder AddEventHandlers(this IUkiyoBuilder builder)
        {
            builder.Services.Scan(s =>
                                  s.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies())
                                  .AddClasses(c => c.AssignableTo(typeof(IEventHandler <>)))
                                  .AsImplementedInterfaces()
                                  .WithTransientLifetime());

            return(builder);
        }
Exemple #9
0
        public static IUkiyoBuilder AddAutoMapper(this IUkiyoBuilder builder, Type type)
        {
            builder.Services.AddAutoMapper(x =>
            {
                x.AddMaps(type);
                x.AllowNullCollections = true;
            }, type);

            return(builder);
        }
Exemple #10
0
        public static IUkiyoBuilder AddSwaggerDocs(this IUkiyoBuilder builder, string sectionName = SectionName)
        {
            if (string.IsNullOrWhiteSpace(sectionName))
            {
                sectionName = SectionName;
            }

            var options = builder.GetOptions <SwaggerOptions>(sectionName);

            return(builder.AddSwaggerDocs(options));
        }
Exemple #11
0
        public static IUkiyoBuilder AddRedis(this IUkiyoBuilder builder, RedisOptions options)
        {
            if (!builder.TryRegister(RegistryName))
            {
                return(builder);
            }

            builder.Services.AddStackExchangeRedisCache(o =>
            {
                o.Configuration = options.ConnectionString;
                o.InstanceName  = options.Instance;
            });

            return(builder);
        }
Exemple #12
0
 public static IUkiyoBuilder AddWebApiSwaggerDocs(this IUkiyoBuilder builder,
                                                  Func <ISwaggerOptionsBuilder, ISwaggerOptionsBuilder> buildOptions)
 => builder.AddWebApiSwaggerDocs(b => b.AddSwaggerDocs(buildOptions));
Exemple #13
0
 public static IUkiyoBuilder AddDbContext <TDbContext>(this IUkiyoBuilder builder, DatabaseOptions databaseOptions) where TDbContext : DbContext
 {
     builder.Services.AddDbContextPoolWithConnectionString <TDbContext>(databaseOptions.GetApplicationConnectionString());
     return(builder);
 }
Exemple #14
0
        public static IUkiyoBuilder AddDbContext <TDbContext>(this IUkiyoBuilder builder, string configurationSectionName = SectionName) where TDbContext : DbContext
        {
            var options = builder.GetOptions <DatabaseOptions>(configurationSectionName);

            return(builder.AddDbContext <TDbContext>(options));
        }
Exemple #15
0
 public static IUkiyoBuilder AddInMemoryEventDispatcher(this IUkiyoBuilder builder)
 {
     builder.Services.AddSingleton <IEventDispatcher, EventDispatcher>();
     return(builder);
 }
Exemple #16
0
        public static IUkiyoBuilder AddRedis(this IUkiyoBuilder builder, string configurationSectionName = SectionName)
        {
            var options = builder.GetOptions <RedisOptions>(configurationSectionName);

            return(builder.AddRedis(options));
        }
Exemple #17
0
 public static IUkiyoBuilder AddWebApiSwaggerDocs(this IUkiyoBuilder builder, SwaggerOptions options)
 => builder.AddWebApiSwaggerDocs(b => b.AddSwaggerDocs(options));
Exemple #18
0
 private static IUkiyoBuilder AddWebApiSwaggerDocs(this IUkiyoBuilder builder, Action <IUkiyoBuilder> registerSwagger)
 {
     registerSwagger(builder);
     builder.Services.AddSwaggerGen(c => c.DocumentFilter <WebApiDocumentFilter>());
     return(builder);
 }