Example #1
0
 internal static IStructureAppBuilder AddSettingsServices(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped(typeof(ISettingsRepository <>), typeof(SettingsRepository <>));
     builder.Services.AddScoped(typeof(ISettingsManager <>), typeof(SettingsManager <>));
     builder.Services.AddScoped(typeof(ISettingsCache <>), typeof(SettingsCache <>));
     return(builder);
 }
Example #2
0
        internal static IStructureAppBuilder AddMessaging(this IStructureAppBuilder builder)
        {
            builder.Services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();
            builder.Services.AddSingleton <IEventBusProcessingContextProvider, UnitOfWorkEventBusProcessingContextProvider>();
            builder.Services.AddScoped <IDistributedEventStore, InMemoryDistributedEventStore>();

            return(builder);
        }
Example #3
0
        internal static IStructureAppBuilder AddDefaultAuthorizationService(this IStructureAppBuilder builder)
        {
            var type = typeof(AuthorizationService);

            builder.Services.AddScoped(type);
            builder.Services.AddScoped(typeof(IAuthorizationService), provider => provider.GetService(type));
            return(builder);
        }
Example #4
0
        internal static IStructureAppBuilder AddDefaultSession(this IStructureAppBuilder builder)
        {
            var claimAppSessionType = typeof(ClaimsAppSession);

            builder.Services.AddScoped(claimAppSessionType);
            builder.Services.AddScoped(typeof(IAppSession), provider => provider.GetService(claimAppSessionType));
            builder.Services.AddScoped <ICurrentUser, CurrentUser>();
            return(builder);
        }
Example #5
0
        public static IStructureAppBuilder AddCache <TCacheManager>(this IStructureAppBuilder builder)
            where TCacheManager : ICacheManager
        {
            var cacheManagerType = typeof(TCacheManager);

            builder.Services.AddSingleton(cacheManagerType);
            builder.Services.AddSingleton(typeof(ICacheManager), provider => provider.GetService(cacheManagerType));
            return(builder);
        }
Example #6
0
 internal static IStructureAppBuilder AddMultiTenancyServices(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped <ICurrentTenant, CurrentTenant>();
     builder.Services.AddScoped <ITenantStore, DefaultTenantStore>();
     builder.Services.AddScoped <ITenantResolver, TenantResolver>();
     builder.Services.AddSingleton <ICurrentTenantAccessor, AsyncLocalCurrentTenantAccessor>();
     builder.Services.AddTransient <MultiTenantFilter>();
     builder.Services.Configure <DataFilterOptions>(c => c.Filters.Add(typeof(MultiTenantFilter), new DataFilterState(true)));
     return(builder);
 }
Example #7
0
 internal static IStructureAppBuilder AddOtherServices(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped <INotificationCollection, NotificationCollection>();
     builder.Services.AddSingleton <IPluralizationService, PluralizationService>();
     builder.Services.AddScoped <IErrorInfoBuilder, ErrorInfoBuilder>();
     builder.Services.AddSingleton(typeof(IDataFilterHandler), typeof(DataFilterHandler));
     builder.Services.AddTransient <SoftDeleteFilter>();
     builder.Services.Configure <DataFilterOptions>(c => c.Filters.Add(typeof(SoftDeleteFilter), new DataFilterState(true)));
     return(builder);
 }
        private void AddConventions(IStructureAppBuilder builder)
        {
            builder.Services.AddSingleton <IRouteModelConvention, DefaultRouteModelConvention>();

            builder.Services.Configure <MvcOptions, IRouteModelConvention>((opts, convention) =>
            {
                opts.Filters.Add(new HttpResponseExceptionFilter());
                opts.Conventions.Add(convention);
            });
        }
        public void Configure(IStructureAppBuilder builder)
        {
            builder.Services.AddScoped(
                typeof(IGrantChecker),
                typeof(GrantChecker <,>).MakeGenericType(
                    builder.EntityTypes.User,
                    builder.EntityTypes.Role));

            builder.Services.AddScoped(typeof(SignInManager <>).MakeGenericType(builder.EntityTypes.User));
        }
        private void ConfigureAddOns(IStructureAppBuilder builder)
        {
            //TODO: refactor the way to add addons
            var opts = new AspNetCoreOptions();

            setupAction?.Invoke(opts);

            foreach (var addOn in opts.AddOns)
            {
                addOn.Configure(builder);
            }
        }
        private void AddMultiTenancy(IStructureAppBuilder builder)
        {
            builder.Services.AddTransient <MultiTenancyMiddleware>();

            builder.Services.Configure <TenantResolveOptions>(options =>
            {
                options.TenantResolvers.Insert(0, new RouteTenantResolveContributor());
                //TODO: Add contributors
                //options.TenantResolvers.Add(new RouteTenantResolveContributor());
                //options.TenantResolvers.Add(new HeaderTenantResolveContributor());
                //options.TenantResolvers.Add(new CookieTenantResolveContributor());
            });
        }
        public void Configure(IStructureAppBuilder builder)
        {
            builder.Services.Configure(setupAction);
            builder.Services.AddScoped <IHttpContextAccessor, HttpContextAccessor>();
            builder.Services.AddScoped <IPrincipalAccessor, AspNetCorePrincipalAccessor>();
            builder.Services.TryAddEnumerable(ServiceDescriptor.Transient <IApiControllerSpecification, ApiControllerSpecification>());
            builder.Services.AddScoped <IMethodInvocationValidator, MvcActionInvocationValidator>(); //TODO: check location IMethodInvocationValidator
            builder.Services.AddScoped <IActionExceptionHandler, ActionExceptionHandler>();

            AddFilters(builder);
            AddConventions(builder);
            AddMultiTenancy(builder);
            ConfigureAddOns(builder);
        }
Example #13
0
 internal static IStructureAppBuilder AddDefaultServices(this IStructureAppBuilder builder)
 {
     return(builder.AddCache <InMemoryCacheManager>()
            .AddDefaultSession()
            .AddDefaultUnitOfWork()
            .AddDefaultAuthorizationService()
            .AddDefaultLocalizationServices()
            .AddDefaultStores()
            .AddAuditServices()
            .AddSettingsServices()
            .AddMultiTenancyServices()
            .AddMessaging()
            .AddOtherServices());
 }
        public void Configure(IStructureAppBuilder builder)
        {
            AsyncQueryableExecutor.SetExecutor(new NhAsyncQueryableExecutor());

            builder.Services.AddSingleton <ISessionFactoryBuilder, FluentSessionFactoryBuilder>();
            builder.Services.AddSingleton <IPersistenceConfigurerProvider, PersistenceConfigurerProvider>();
            builder.Services.AddSingleton((c) => c.GetService <ISessionFactoryBuilder>().BuildSessionFactory());
            builder.Services.AddScoped(typeof(IRepository <,>), typeof(Repository <,>));
            builder.Services.AddScoped <ITransactionManager, NhTransactionManager>();
            builder.Services.AddScoped <IDataContext, NhDataContext>();
            builder.Services.AddScoped <INhDataContext, NhDataContext>();
            builder.Services.AddScoped <INhSessionProvider, NhSessionProvider>();
            builder.Services.Configure <NhibernateOptions>(builder.Configuration.GetSection("NHibernate"));
        }
        private void AddFilters(IStructureAppBuilder builder)
        {
            builder.Services.AddScoped(typeof(AuthorizationFilter));
            builder.Services.AddScoped(typeof(ValidationActionFilter));
            builder.Services.AddScoped(typeof(UnitOfWorkActionFilter));
            builder.Services.AddScoped(typeof(ExceptionFilter));

            builder.Services.Configure <MvcOptions>(opts =>
            {
                opts.Filters.AddService(typeof(AuthorizationFilter));
                opts.Filters.AddService(typeof(ValidationActionFilter));
                opts.Filters.AddService(typeof(UnitOfWorkActionFilter));
                opts.Filters.AddService(typeof(ExceptionFilter));
            });
        }
        public void Configure(IStructureAppBuilder builder)
        {
            if (configureOptions != null)
            {
                builder.Services.Configure(configureOptions);
            }

            builder.Services.AddSingleton <IEventBus, RabbitMQEventBus>();
            builder.Services.AddSingleton <IRabbitMQPersistentConnection, DefaultRabbitMQPersistentConnection>();

            builder.Services.AddSingleton <IConnectionFactory>((c) =>
            {
                var options = c.GetOptions <RabbitMQEventBusOptions>();
                return(new ConnectionFactory()
                {
                    HostName = options.HostName, DispatchConsumersAsync = options.DispatchConsumersAsync
                });
            });
        }
        public void Configure(IStructureAppBuilder builder)
        {
            //TODO: reactor AddAuthentication to allow mutiples authentication schemes

            builder.Services
            .AddAuthentication(c =>
            {
                c.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                c.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, opts =>
            {
                opts.RequireHttpsMetadata      = false;
                opts.SaveToken                 = true;
                opts.Audience                  = options.Audience;
                opts.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = options.CreateSymmetricSecurityKey(),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };

                configureJwtBearer?.Invoke(opts);
            });

            builder.Services.AddScoped(
                typeof(IGrantChecker),
                typeof(GrantChecker <,>).MakeGenericType(
                    builder.EntityTypes.User,
                    builder.EntityTypes.Role));

            builder.Services.AddScoped(typeof(SignInManager <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IRefreshTokenStore <>),
                typeof(RefreshTokenStore <>));
        }
Example #18
0
 internal static IStructureAppBuilder AddDefaultUnitOfWork(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped <IUnitOfWorkManager, UnitOfWorkManager>();
     builder.Services.AddScoped <IUnitOfWork, UnitOfWork>();
     return(builder);
 }
Example #19
0
 public void Configure(IStructureAppBuilder builder)
 {
     builder.Services.AddSingleton <IObjectAdapter, AutoMapperAdapter>();
     builder.Services.AddAutoMapper(assemblies);
 }
Example #20
0
 internal static IStructureAppBuilder AddDefaultLocalizationServices(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped <ILocalizer, DefaultLocalizer>();
     builder.Services.AddScoped <ILocalizableContext, LocalizableContext>();
     return(builder);
 }
Example #21
0
 internal static IStructureAppBuilder AddAuditServices(this IStructureAppBuilder builder)
 {
     builder.Services.AddScoped <IEntityPropertySetter, EntityPropertySetter>();
     return(builder);
 }
Example #22
0
        public void Configure(IStructureAppBuilder builder)
        {
            builder.Services.AddScoped(
                typeof(IUserValidator <>).MakeGenericType(builder.EntityTypes.User),
                typeof(UserValidator <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IPasswordValidator <>).MakeGenericType(builder.EntityTypes.User),
                typeof(PasswordValidator <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IPasswordHasher <>).MakeGenericType(builder.EntityTypes.User),
                typeof(PasswordHasher <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IUserClaimsPrincipalFactory <>).MakeGenericType(builder.EntityTypes.User),
                typeof(Identity.UserClaimsPrincipalFactory <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IUserConfirmation <>).MakeGenericType(builder.EntityTypes.User),
                typeof(DefaultUserConfirmation <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped <ILookupNormalizer, UpperInvariantLookupNormalizer>();
            builder.Services.AddScoped <IdentityErrorDescriber>();

            builder.Services.AddScoped(
                typeof(IRoleValidator <>).MakeGenericType(builder.EntityTypes.Role),
                typeof(RoleValidator <>).MakeGenericType(builder.EntityTypes.Role));


            Type sceUserStoreType;

            if (builder.EntityTypes.UserPermission != null)
            {
                sceUserStoreType = (builder.EntityTypes.UserRole != null ? typeof(UserPermissionStore <, , ,>) : typeof(UserPermissionStore <, ,>))
                                   .MakeGenericTypeNotNullArguments(
                    builder.EntityTypes.User,
                    builder.EntityTypes.UserRole,
                    builder.EntityTypes.UserPermission,
                    builder.EntityTypes.Role
                    );
            }
            else
            {
                sceUserStoreType = (builder.EntityTypes.UserRole != null ? typeof(UserStore <, ,>) : typeof(UserStore <,>))
                                   .MakeGenericTypeNotNullArguments(
                    builder.EntityTypes.User,
                    builder.EntityTypes.UserRole,
                    builder.EntityTypes.Role
                    );
            }

            var sceUserManagerType = (builder.EntityTypes.UserPermission != null ? typeof(UserManager <, ,>) : typeof(UserManager <,>))
                                     .MakeGenericTypeNotNullArguments(
                builder.EntityTypes.User,
                builder.EntityTypes.UserPermission,
                builder.EntityTypes.Role);

            var roleManagerType = typeof(RoleManager <,>).MakeGenericType(
                builder.EntityTypes.Role,
                builder.EntityTypes.RolePermission);

            builder.Services.AddScoped(typeof(IUserStore <>).MakeGenericType(builder.EntityTypes.User), sceUserStoreType);
            builder.Services.AddScoped(typeof(IIdentityUserManager <>).MakeGenericType(builder.EntityTypes.User), sceUserManagerType);
            builder.Services.AddScoped(typeof(UserManager <>).MakeGenericType(builder.EntityTypes.User), sceUserManagerType);

            builder.Services.AddScoped(new Type[] {
                typeof(IRoleManager <>).MakeGenericType(builder.EntityTypes.Role),
                typeof(RoleManager <>).MakeGenericType(builder.EntityTypes.Role)
            }, roleManagerType);

            if (builder.EntityTypes.RolePermission != null)
            {
                builder.Services.AddScoped(typeof(IRoleStore <>).MakeGenericType(builder.EntityTypes.Role),
                                           typeof(RoleStore <,>).MakeGenericType(
                                               builder.EntityTypes.Role,
                                               builder.EntityTypes.RolePermission));
            }
            else
            {
                builder.Services.AddScoped(typeof(IRoleStore <>).MakeGenericType(builder.EntityTypes.Role),
                                           typeof(RoleStore <>).MakeGenericTypeNotNullArguments(
                                               builder.EntityTypes.Role));
            }
        }
Example #23
0
 internal static IStructureAppBuilder AddDefaultStores(this IStructureAppBuilder builder)
 {
     builder.Services.AddSingleton <IPermissionStore, PermissionStore>();
     return(builder);
 }