public static void AddRapier(this IServiceCollection services) { var provider = services.BuildServiceProvider(); var config = provider.GetRequiredService <RapierConfigurationOptions>(); var entitySettings = new EntitySettingsContainer(config.EntitySettingsCollection); foreach (var handlerType in new HandlerTypesContainer()) { services.AddScoped(handlerType[0], handlerType[1]); } var repositoryShells = new Dictionary <string, RepositoryShell>(); var parameterShells = new Dictionary <string, IReadOnlyDictionary <string, QueryParameterShell> >(); foreach (var setting in entitySettings) { parameterShells.Add(setting.QueryRequestType.Name, CreateEntityParameterShells(setting)); services.AddTransient(typeof(IValidator <>).MakeGenericType(setting.CommandRequestType), setting.ValidatorType); services.AddEntityHandlers(setting); var queryManager = CreateQueryManager(setting); var repositoryConstructor = CreateRepositoryConstructor(setting, config.ContextTypes[0], config.ExtendedRepositoryType); repositoryShells.Add( setting.EntityType.Name, new RepositoryShell(repositoryConstructor, queryManager)); } services.AddSingleton(new RequestProviderItems { Parameters = new ReadOnlyDictionary <string, IReadOnlyDictionary <string, QueryParameterShell> >(parameterShells), PaginationSettings = config.PaginationSettings ?? new PaginationSettings(), }); services.AddHttpContextAccessor(); services.AddPipelineBehaviors(); services.AddMediatR(Assembly.GetExecutingAssembly()); var mapper = new Mapping(entitySettings).ConfigureMapper(); services.TryAddScoped(x => mapper); services.AddRepositoryWrapper(config.ContextTypes[0], mapper, repositoryShells); services.AddUriService(); services.AddSwagger(); }
public Mapping(EntitySettingsContainer settings) => _settings = settings;