Exemplo n.º 1
0
        /// <summary>
        /// Add your user information to the MiCake, which will be tracked automatically.
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="miCakeUserType"><see cref="IMiCakeUser{TKey}"/></param>
        /// <returns></returns>
        public static IMiCakeBuilder AddIdentityCore(this IMiCakeBuilder builder, Type miCakeUserType)
        {
            CheckValue.NotNull(miCakeUserType, nameof(miCakeUserType));

            if (!typeof(IMiCakeUser).IsAssignableFrom(miCakeUserType))
            {
                throw new ArgumentException($"Wrong user type,must use {nameof(IMiCakeUser)} to register your micake user.");
            }

            builder.ConfigureApplication((app, services) =>
            {
                //Add identity module.
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeIdentityModule));

                //Early registration IdentityAuditProvider.
                var userKeyType = TypeHelper.GetGenericArguments(miCakeUserType, typeof(IMiCakeUser <>));

                if (userKeyType == null || userKeyType[0] == null)
                {
                    throw new ArgumentException($"Can not get the primary key type of IMiCakeUser,Please check your config when AddIdentity().");
                }

                var auditProviderType = typeof(IdentityAuditProvider <>).MakeGenericType(userKeyType[0]);
                services.AddScoped(typeof(IAuditProvider), auditProviderType);
            });

            return(builder);
        }
        /// <summary>
        /// Register <see cref="IMiCakeUser"/> to MiCake application, who will be automatically audited and authenticated by MiCake.
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="miCakeUserType">User inherit from <see cref="IMiCakeUser"/></param>
        /// <param name="identityOptionsConfig"></param>
        public static IMiCakeBuilder UseIdentity(this IMiCakeBuilder builder, Type miCakeUserType, Action <MiCakeIdentityOptions> identityOptionsConfig = null)
        {
            //Add identity core.
            builder.AddIdentityCore(miCakeUserType);

            //register user services
            var userKeyType = TypeHelper.GetGenericArguments(miCakeUserType, typeof(IMiCakeUser <>));

            if (userKeyType == null || userKeyType[0] == null)
            {
                throw new ArgumentException($"Can not get the primary key type of IMiCakeUser,Please check your config when AddIdentity().");
            }

            builder.ConfigureApplication((app, services) =>
            {
                //make sure has add ihttpcontextaccessor.
                services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();

                var currentMiCakeUserType = typeof(ICurrentMiCakeUser <>).MakeGenericType(userKeyType);
                var aspnetCoreCurrentUser = typeof(AspNetCoreMiCakeUser <>).MakeGenericType(userKeyType);
                //add ICurrentMiCakeUser
                services.Replace(new ServiceDescriptor(typeof(ICurrentMiCakeUser), aspnetCoreCurrentUser, ServiceLifetime.Scoped));
                services.Replace(new ServiceDescriptor(currentMiCakeUserType, aspnetCoreCurrentUser, ServiceLifetime.Scoped));

                Action <MiCakeIdentityOptions> defaultOptions = (s) => { };
                services.Configure(identityOptionsConfig ?? defaultOptions);
            });

            return(builder);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Add MiCake EFCore services.
 /// </summary>
 /// <typeparam name="TDbContext"><see cref="MiCakeDbContext"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <param name="optionsBuilder">The config for MiCake EFCore extension</param>
 /// <returns><see cref="IMiCakeBuilder"/></returns>
 public static IMiCakeBuilder UseEFCore <TDbContext>(
     this IMiCakeBuilder builder,
     Action <MiCakeEFCoreOptions> optionsBuilder)
     where TDbContext : MiCakeDbContext
 {
     return(UseEFCore(builder, typeof(TDbContext), optionsBuilder));
 }
        public static IMiCakeBuilder AddAutofac(this IMiCakeBuilder builder)
        {
            builder.ConfigureApplication(app =>
            {
                app.ModuleManager.AddFeatureModule(typeof(MiCakeAutofacModule));
            });

            return(builder);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Add SqlReader for MiCake
        /// </summary>
        public static IMiCakeBuilder UseSqlReader(this IMiCakeBuilder builder, Action <MiCakeSqlReaderOptions> optionsAction = null)
        {
            builder.ConfigureApplication((app, services) =>
            {
                services.AddSqlReader(optionsAction);
            });

            return(builder);
        }
        /// <summary>
        /// Add MiCake RabbitMQ services.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="optionsBuilder"></param>
        /// <returns></returns>
        public static IMiCakeBuilder UseRabbitMQ(this IMiCakeBuilder builder, Action <RabbitMQOptions> optionsBuilder)
        {
            builder.ConfigureApplication((app, services) =>
            {
                //register ef module to micake module collection
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeRabbitMQModule));

                services.AddRabbitMQ(optionsBuilder);
            });

            return(builder);
        }
        /// <summary>
        /// Register <see cref="IMiCakeUser"/> to MiCake application, who will be automatically audited and authenticated by MiCake.
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="miCakeUserType">User inherit from <see cref="IMiCakeUser"/></param>
        /// <param name="jwtSupportOptionsConfig">config <see cref="MiCakeJwtOptions"/>.This optios will be used by <see cref="IJwtSupporter"/></param>
        public static IMiCakeBuilder UseIdentity(this IMiCakeBuilder builder, Type miCakeUserType, Action <MiCakeJwtOptions> jwtSupportOptionsConfig)
        {
            UseIdentity(builder, miCakeUserType);

            if (jwtSupportOptionsConfig != null)
            {
                builder.ConfigureApplication((app, services) =>
                {
                    services.PostConfigure(jwtSupportOptionsConfig);
                });
            }
            return(builder);
        }
Exemplo n.º 8
0
        public static IMiCakeBuilder AddSerilog(this IMiCakeBuilder builder, Action <SerilogConfigureOption> serilogOptionAction)
        {
            //regist serilog to micake framework
            builder.ConfigureApplication(s => s.ModuleManager.AddFeatureModule(typeof(MiCakeSerilogModule)));
            // var provide = new SerilogProvider(builder.Services);
            // provide.AddSerilogInMiCake(serilogOptionAction ??= defaultOption);
            return(builder);

            //void defaultOption(SerilogConfigureOption option)
            //{
            //    option.AutoLogError = true;
            //    option.FilterLogLevel = Microsoft.Extensions.Logging.LogLevel.Information;
            //};
        }
Exemplo n.º 9
0
        /// <summary>
        /// Add Jwt support:can use <see cref="IJwtAuthManager"/> to create jwt token or and refresh-token.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IMiCakeBuilder AddJwt(this IMiCakeBuilder builder, Action <MiCakeJwtOptions> options)
        {
            builder.ConfigureApplication((app, services) =>
            {
                services.TryAddScoped <IJwtAuthManager, JwtAuthManager>();
                services.TryAddScoped <IRefreshTokenService, DefaultRefreshTokenService>();

                services.TryAddScoped <IRefreshTokenStore, DefaultRefreshTokenStore>();
                services.TryAddScoped <IRefreshTokenHandleGenerator, DefaultRefreshTokenHandleGenerator>();
                services.Configure(options);
            });

            return(builder);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Add CQS for MiCake
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="CQSAssemblies">The assembly in which the CQS resides</param>
        /// <returns></returns>
        public static IMiCakeBuilder UseCQS(this IMiCakeBuilder builder, params Assembly[] CQSAssemblies)
        {
            builder.ConfigureApplication((app, services) =>
            {
                //Add CQS module.
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeCQSModule));

                ResgisterAllCQSHandler(services, CQSAssemblies);

                services.TryAddScoped <IQueryDispatcher, QueryDispatcher>();
                services.TryAddScoped <ICommandDispatcher, CommandDispatcher>();
            });

            return(builder);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Add MiCake AspnetCore services.
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="optionsBulder">The config for MiCake AspNetCore extension</param>
        /// <returns><see cref="IMiCakeBuilder"/></returns>
        public static IMiCakeBuilder UseAspNetCore(
            this IMiCakeBuilder builder,
            Action <MiCakeAspNetOptions> optionsBulder)
        {
            builder.ConfigureApplication((app, services) =>
            {
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeAspNetCoreModule));
                services.Configure <MiCakeAspNetOptions>(options =>
                {
                    optionsBulder?.Invoke(options);
                });
            });

            return(builder);
        }
        /// <summary>
        /// Add MiCake Audit services.
        /// <para>
        /// For example:Indicates that a class has creation time, modification time, etc
        /// </para>
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="optionsConfig">The config for audit options</param>
        public static IMiCakeBuilder UseAudit(this IMiCakeBuilder builder, Action <MiCakeAuditOptions> optionsConfig)
        {
            var options = new MiCakeAuditOptions();

            optionsConfig?.Invoke(options);

            builder.ConfigureApplication((app, services) =>
            {
                //register audit module to micake module collection
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeAuditModule));

                app.ApplicationOptions.AdditionalInfo.Deposit(AuditForApplicationOptionsKey, options);
            });

            return(builder);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Add MiCake EFCore services.
        /// </summary>
        /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
        /// <param name="miCakeDbContextType"><see cref="MiCakeDbContext"/></param>
        /// <param name="optionsBulder">The config for MiCake EFCore extension</param>
        /// <returns><see cref="IMiCakeBuilder"/></returns>
        public static IMiCakeBuilder UseEFCore(
            this IMiCakeBuilder builder,
            Type miCakeDbContextType,
            Action <MiCakeEFCoreOptions> optionsBulder)
        {
            MiCakeEFCoreOptions options = new MiCakeEFCoreOptions(miCakeDbContextType);

            optionsBulder?.Invoke(options);

            builder.ConfigureApplication((app, services) =>
            {
                //register ef module to micake module collection
                app.ModuleManager.AddMiCakeModule(typeof(MiCakeEFCoreModule));

                services.AddSingleton <IObjectAccessor <MiCakeEFCoreOptions> >(options);
            });

            return(builder);
        }
 /// <summary>
 /// Add MiCake Audit services.
 /// <para>
 /// For example:Indicates that a class has creation time, modification time, etc
 /// </para>
 /// </summary>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 public static IMiCakeBuilder UseAudit(this IMiCakeBuilder builder)
 {
     return(UseAudit(builder, null));
 }
 /// <summary>
 /// Register <see cref="IMiCakeUser"/> to MiCake application, who will be automatically audited and authenticated by MiCake.
 /// </summary>
 /// <typeparam name="TMiCakeUser">User inherit from <see cref="IMiCakeUser"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <param name="jwtSupportOptionsConfig">config <see cref="MiCakeJwtOptions"/>.This optios will be used by <see cref="IJwtSupporter"/></param>
 public static IMiCakeBuilder UseIdentity <TMiCakeUser>(this IMiCakeBuilder builder, Action <MiCakeJwtOptions> jwtSupportOptionsConfig)
     where TMiCakeUser : IMiCakeUser
 {
     return(UseIdentity(builder, typeof(TMiCakeUser), jwtSupportOptionsConfig));
 }
Exemplo n.º 16
0
 /// <summary>
 /// Add MiCake EFCore services.
 /// </summary>
 /// <typeparam name="TDbContext"><see cref="MiCakeDbContext"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <returns><see cref="IMiCakeBuilder"/></returns>
 public static IMiCakeBuilder UseEFCore <TDbContext>(this IMiCakeBuilder builder)
     where TDbContext : MiCakeDbContext
 {
     UseEFCore <TDbContext>(builder, null);
     return(builder);
 }
Exemplo n.º 17
0
 /// <summary>
 /// Add MiCake AspnetCore services.
 /// </summary>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <returns><see cref="IMiCakeBuilder"/></returns>
 public static IMiCakeBuilder UseAspNetCore(this IMiCakeBuilder builder)
 {
     UseAspNetCore(builder, null);
     return(builder);
 }
Exemplo n.º 18
0
 /// <summary>
 /// Add your user information to the MiCake, which will be tracked automatically.
 /// </summary>
 /// <typeparam name="TMiCakeUser"><see cref="IMiCakeUser{TKey}"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 public static IMiCakeBuilder AddIdentityCore <TMiCakeUser>(this IMiCakeBuilder builder)
     where TMiCakeUser : IMiCakeUser
 {
     return(AddIdentityCore(builder, typeof(TMiCakeUser)));
 }
 /// <summary>
 /// Add Jwt support.
 /// </summary>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <param name="jwtSupportOptionsConfig">config <see cref="MiCakeJwtOptions"/>.This optios will be used by <see cref="IJwtAuthManager"/></param>
 public static IMiCakeBuilder UseJwt(this IMiCakeBuilder builder, Action <MiCakeJwtOptions> jwtSupportOptionsConfig)
 {
     return(builder.AddJwt(jwtSupportOptionsConfig));
 }
 /// <summary>
 /// Register <see cref="IMiCakeUser"/> to MiCake application, who will be automatically audited and authenticated by MiCake.
 /// </summary>
 /// <typeparam name="TMiCakeUser">User inherit from <see cref="IMiCakeUser"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 /// <param name="identityOptionsConfig"></param>
 public static IMiCakeBuilder UseIdentity <TMiCakeUser>(this IMiCakeBuilder builder, Action <MiCakeIdentityOptions> identityOptionsConfig = null)
     where TMiCakeUser : IMiCakeUser
 {
     return(UseIdentity(builder, typeof(TMiCakeUser), identityOptionsConfig));
 }
 /// <summary>
 /// Register <see cref="IMiCakeUser"/> to MiCake application, who will be automatically audited and authenticated by MiCake.
 /// </summary>
 /// <typeparam name="TMiCakeUser">User inherit from <see cref="IMiCakeUser"/></typeparam>
 /// <param name="builder"><see cref="IMiCakeBuilder"/></param>
 public static IMiCakeBuilder UseIdentity <TMiCakeUser>(this IMiCakeBuilder builder)
     where TMiCakeUser : IMiCakeUser
 {
     return(UseIdentity(builder, typeof(TMiCakeUser)));
 }
 /// <summary>
 /// Add MiCake RabbitMQ services.
 /// </summary>
 /// <param name="builder"></param>
 /// <returns></returns>
 public static IMiCakeBuilder UseRabbitMQ(this IMiCakeBuilder builder)
 {
     return(UseRabbitMQ(builder, null));
 }
Exemplo n.º 23
0
 public static IMiCakeBuilder AddSerilog(this IMiCakeBuilder builder)
 {
     AddSerilog(builder, null);
     return(builder);
 }