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; }
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); }
public static MSFrameworkBuilder UseEntityFramework(this MSFrameworkBuilder builder, Action <EntityFrameworkBuilder> configure) { var eBuilder = new EntityFrameworkBuilder(builder.Services); configure?.Invoke(eBuilder); builder.Services.UseEntityFramework(); return(builder); }
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); }
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); }
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); }
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); }
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; }
/// <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); }
public static MSFrameworkBuilder UseAutoMapper(this MSFrameworkBuilder builder) { var assemblies = AssemblyFinder.GetAllList(); return(builder.UseAutoMapper(assemblies.ToArray())); }
public static MSFrameworkBuilder UseEntityFrameworkEventSouring(this MSFrameworkBuilder builder) { builder.Services.AddScoped <IEventStore, EfEventStore>(); return(builder); }
public static MSFrameworkBuilder UseAudit(this MSFrameworkBuilder builder) { builder.UseAudit <DefaultAuditService>(); return(builder); }