public static IDataBuilder AddAccessorService(this IDataBuilder builder, Type serviceType, Type implementationTypeDefinition) { builder.NotNull(nameof(builder)); return(builder.AddGenericServiceByPopulateAccessorTypeParameters(serviceType, implementationTypeDefinition)); }
public static IDataBuilder AddAccessorAspect(this IDataBuilder builder, Type serviceType, Type implementationTypeDefinition) { builder.NotNull(nameof(builder)); return(builder.AddGenericServiceByPopulateAccessorTypeParameters(serviceType, implementationTypeDefinition, (type, descriptor) => type.MakeGenericType(descriptor.GenId.ArgumentType, descriptor.CreatedBy.ArgumentType), addEnumerable: true)); }
/// <summary> /// 设置数据构建器。 /// </summary> /// <param name="memoryCache">给定的 <see cref="IMemoryCache"/>。</param> /// <param name="builder">给定的 <see cref="IDataBuilder"/>。</param> /// <returns>返回 <see cref="IMemoryCache"/>。</returns> public static IMemoryCache SetDataBuilder(this IMemoryCache memoryCache, IDataBuilder builder) { builder.NotNull(nameof(builder)); memoryCache.NotNull(nameof(memoryCache)); memoryCache.Set(nameof(IDataBuilder), builder); return(memoryCache); }
public static IDataBuilder AddAccessor <TAccessor, TImplementation>(this IDataBuilder builder, Action <ITenant, DbContextOptionsBuilder> setupAction, int poolSize = 128) where TAccessor : class, IAccessor where TImplementation : DbContext, TAccessor { builder.NotNull(nameof(builder)); setupAction.NotNull(nameof(setupAction)); var mapper = AccessorTypeParameterMappingHelper.ParseMapper(typeof(TImplementation)); builder.SetProperty(p => p.AccessorTypeParameterMapper, mapper); if (poolSize > 0) { builder.Services.AddDbContextPool <TAccessor, TImplementation>(ConfigureOptionsBuilder, poolSize); } else { builder.Services.AddDbContext <TAccessor, TImplementation>(ConfigureOptionsBuilder); } builder.Services.TryAddScoped(sp => (TImplementation)sp.GetRequiredService <TAccessor>()); return(builder .AddInternalAccessorServices() .AddDesignTimeServices <TImplementation>()); // ConfigureOptionsBuilder void ConfigureOptionsBuilder(IServiceProvider applicationServiceProvider, DbContextOptionsBuilder optionsBuilder) { optionsBuilder.ReplaceServices(); if (builder.MemoryCache.IsNull()) { var memoryCache = applicationServiceProvider.GetRequiredService <IMemoryCache>(); memoryCache.SetDataBuilder(builder); builder.SetProperty(p => p.MemoryCache, memoryCache); optionsBuilder.UseMemoryCache(memoryCache); } setupAction.Invoke((builder.Dependency as DataBuilderDependency).Options.DefaultTenant, optionsBuilder); } }
public static IDataBuilder AddDatabaseDesignTime <TDesignTime>(this IDataBuilder builder) where TDesignTime : class, IDesignTimeServices { builder.NotNull(nameof(builder)); var designTimeType = typeof(TDesignTime); builder.SetProperty(p => p.DatabaseDesignTimeType, designTimeType); var designTime = designTimeType.EnsureCreate <TDesignTime>(); designTime.ConfigureDesignTimeServices(builder.Services); builder.Services.Configure <DataBuilderOptions>(options => { var reference = AssemblyDescriptor.Create(designTimeType.Assembly); if (!options.MigrationAssemblyReferences.Contains(reference)) { options.MigrationAssemblyReferences.Add(reference); } }); return(builder); }