Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 public Mapping(EntitySettingsContainer settings) => _settings = settings;