internal static MSFrameworkBuilder UseInitializer(this MSFrameworkBuilder builder)
        {
            var assemblies = AssemblyFinder.GetAllList();
            var types = new HashSet<Type>();
            foreach (var assembly in assemblies)
            {
                foreach (var type in assembly.GetTypes())
                {
                    types.Add(type);
                }
            }

            var initializerType = typeof(Initializer);
            var notAllowAutoRegisterInitializerType = typeof(INotAutoRegisterInitializer);
            types.Remove(initializerType);
            foreach (var type in types)
            {
                if (initializerType.IsAssignableFrom(type) &&
                    !notAllowAutoRegisterInitializerType.IsAssignableFrom(type))
                {
                    builder.Services.AddSingleton(initializerType, type);
                }
            }

            return builder;
        }
Esempio n. 2
0
 public static MSFrameworkBuilder UseAutoMapper(this MSFrameworkBuilder builder,
                                                params Type[] types)
 {
     builder.Services.AddScoped <Mapper.IObjectMapper, AutoMapperMapper>();
     builder.Services.AddAutoMapper(types);
     return(builder);
 }
 public static MSFrameworkBuilder UseMySqlMigrator(this MSFrameworkBuilder builder, Type type,
                                                   string connectionString)
 {
     builder.Services.AddSingleton <Initializer>(provider => new MySqlMigrator(type, connectionString,
                                                                               provider.GetRequiredService <ILogger <MySqlMigrator> >()));
     return(builder);
 }
 public static MSFrameworkBuilder AddPermission(this MSFrameworkBuilder builder)
 {
     builder.Services.AddScoped <PermissionOptions>();
     builder.Services.AddScoped <ICerberusClient, CerberusClient>();
     builder.Services.AddScoped <AspNetCorePermissionFinder>();
     return(builder);
 }
 public static MSFrameworkBuilder UseAspNetCore(this MSFrameworkBuilder builder)
 {
     builder.Services.TryAddSingleton <IFunctionFinder, AspNetCoreFunctionFinder>();
     builder.Services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
     builder.Services.AddSingleton <IActionResultTypeMapper, ActionResultTypeMapper>();
     builder.Services.TryAddScoped <ISession, HttpContextSession>();
     return(builder);
 }
Esempio n. 6
0
        public static MSFrameworkBuilder UseEntityFramework(this MSFrameworkBuilder builder,
                                                            Action <EntityFrameworkBuilder> configure)
        {
            var eBuilder = new EntityFrameworkBuilder(builder.Services);

            configure?.Invoke(eBuilder);
            builder.Services.UseEntityFramework();
            return(builder);
        }
Esempio n. 7
0
        public static MSFrameworkBuilder UseRabbitMQEventDispatcher(this MSFrameworkBuilder builder,
                                                                    Action <RabbitMQOptions> configure, params Type[] eventTypes)
        {
            var options = new RabbitMQOptions();

            configure?.Invoke(options);

            builder.UseRabbitMQEventDispatcher(options, eventTypes);
            return(builder);
        }
Esempio n. 8
0
        public static MSFrameworkBuilder AddLocalEventBus(this MSFrameworkBuilder builder,
                                                          Action <EventBusBuilder> configure = null)
        {
            EventBusBuilder eBuilder = new EventBusBuilder(builder.Services);

            configure?.Invoke(eBuilder);

            builder.Services.AddLocalEventBus();

            return(builder);
        }
Esempio n. 9
0
        public static MSFrameworkBuilder UseDependencyInjectionScanner(this MSFrameworkBuilder builder)
        {
            var dependencyTypeDict = DependencyTypeFinder.GetDependencyTypeDict();

            foreach (var kv in dependencyTypeDict)
            {
                builder.Services.Add(kv.Value, kv.Key);
            }

            return(builder);
        }
Esempio n. 10
0
        public static MSFrameworkBuilder UseEntityFramework(this MSFrameworkBuilder builder,
                                                            Action <EntityFrameworkBuilder> configure, IConfiguration configuration)
        {
            configuration.NotNull(nameof(configuration));

            EntityFrameworkBuilder eBuilder = new EntityFrameworkBuilder(builder.Services);

            configure?.Invoke(eBuilder);

            var section = configuration.GetSection("DbContexts");

            EntityFrameworkOptions.EntityFrameworkOptionDict =
                section.Get <Dictionary <string, EntityFrameworkOptions> >();
            if (EntityFrameworkOptions.EntityFrameworkOptionDict == null ||
                EntityFrameworkOptions.EntityFrameworkOptionDict.Count == 0)
            {
                throw new MSFrameworkException("未能找到数据上下文配置");
            }

            var repeated = EntityFrameworkOptions.EntityFrameworkOptionDict.Values.GroupBy(m => m.DbContextType)
                           .FirstOrDefault(m => m.Count() > 1);

            if (repeated != null)
            {
                throw new MSFrameworkException($"数据上下文配置中存在多个配置节点指向同一个上下文类型:{repeated.First().DbContextTypeName}");
            }

            if (Singleton <IEntityConfigurationTypeFinder> .Instance == null)
            {
                Singleton <IEntityConfigurationTypeFinder> .Instance = new EntityConfigurationTypeFinder();
                Singleton <IEntityConfigurationTypeFinder> .Instance.Initialize();

                builder.Services.AddSingleton(Singleton <IEntityConfigurationTypeFinder> .Instance);
            }

            builder.Services.AddScoped <DbContextFactory>();

            builder.Services.AddSingleton <IInitializer, EntityFrameworkInitializer>();
            builder.Services.AddScoped <IUnitOfWork, UnitOfWork>();
            return(builder);
        }
        public static MSFrameworkBuilder UseAccessControl(this MSFrameworkBuilder builder, IConfiguration configuration)
        {
            builder.Services.TryAddScoped <AccessControlOptions>();
            builder.Services.TryAddScoped <IAccessClient, AccessClient>();
            builder.Services.AddHttpClient();

            var options = new AccessControlOptions(configuration);

            if (!string.IsNullOrWhiteSpace(options.Authority))
            {
                var httpClient = new HttpClient();
                var disco      = httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
                {
                    Address = options.Authority,
                    Policy  = new DiscoveryPolicy
                    {
                        RequireHttps = false
                    }
                }).Result;
                if (disco.TokenEndpoint == null)
                {
                    throw new ApplicationException($"TokenEndpoint {options.Authority} is null");
                }

                builder.Services.AddAccessTokenManagement(x =>
                {
                    x.Client.Clients.Add("default", new ClientCredentialsTokenRequest
                    {
                        Address      = disco.TokenEndpoint,
                        ClientId     = options.ClientId,
                        ClientSecret = options.ClientSecret
                    });
                    x.Client.Scope = "cerberus-api cerberus-access-server-api";
                });
                builder.Services.AddClientAccessTokenClient(options.HttpClient);
            }

            return(builder);
        }
Esempio n. 12
0
        public static MSFrameworkBuilder UseRabbitMQEventDispatcher(this MSFrameworkBuilder builder,
                                                                    RabbitMQOptions options, params Type[] eventTypes)
        {
            var excludeAssembly = typeof(MSFrameworkBuilder).Assembly;

            if (eventTypes.Any(x => x.Assembly != excludeAssembly))
            {
                var list = new List <Type>(eventTypes)
                {
                    typeof(MSFrameworkBuilder)
                };
                builder.Services.AddEventDispatcher(list.ToArray());
            }
            else
            {
                builder.Services.AddEventDispatcher(eventTypes);
            }

            builder.Services.AddSingleton(options);
            builder.Services.AddScoped <IEventDispatcher, RabbitMQEventDispatcher>();
            return(builder);
        }
 public static MSFrameworkBuilder AddInitializer<TInitializer>(this MSFrameworkBuilder builder)
     where TInitializer : Initializer
 {
     builder.Services.AddSingleton<TInitializer>();
     return builder;
 }
Esempio n. 14
0
 /// <summary>
 /// 审计领域的模型(Type)在同个应用里面(即便是多 DbContext)也应该只配置在一个 DbContext 里面;
 /// 或者审计领域独享一个 DbContext
 /// </summary>
 /// <param name="builder"></param>
 /// <typeparam name="TAuditService"></typeparam>
 /// <returns></returns>
 public static MSFrameworkBuilder UseAudit <TAuditService>(this MSFrameworkBuilder builder)
     where TAuditService : class, IAuditService
 {
     builder.Services.TryAddScoped <IAuditService, TAuditService>();
     return(builder);
 }
Esempio n. 15
0
        public static MSFrameworkBuilder UseAutoMapper(this MSFrameworkBuilder builder)
        {
            var assemblies = AssemblyFinder.GetAllList();

            return(builder.UseAutoMapper(assemblies.ToArray()));
        }
Esempio n. 16
0
 public static MSFrameworkBuilder UseEntityFrameworkEventSouring(this MSFrameworkBuilder builder)
 {
     builder.Services.AddScoped <IEventStore, EfEventStore>();
     return(builder);
 }
Esempio n. 17
0
 public static MSFrameworkBuilder UseAudit(this MSFrameworkBuilder builder)
 {
     builder.UseAudit <DefaultAuditService>();
     return(builder);
 }