Ejemplo n.º 1
0
        private void RegisterValidators(IServiceCollection serviceCollection)
        {
            var typeSearcher = new AppTypeSearcher();

            var validators = typeSearcher.ClassesOfType(typeof(IValidator)).ToList();

            foreach (var validator in validators)
            {
                serviceCollection.AddTransient(validator);
            }

            //validator consumers
            var validatorconsumers = typeSearcher.ClassesOfType(typeof(IValidatorConsumer <>)).ToList();

            foreach (var consumer in validatorconsumers)
            {
                var types = consumer.GetTypeInfo().FindInterfaces((type, criteria) =>
                {
                    var isMatch = type.GetTypeInfo().IsGenericType&& ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
                    return(isMatch);
                }, typeof(IValidatorConsumer <>));
                foreach (var item in types)
                {
                    serviceCollection.AddScoped(item, consumer);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds authentication service
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        public static void AddGrandAuthentication(this IServiceCollection services, IConfiguration configuration)
        {
            var config = new AppConfig();

            configuration.GetSection("Application").Bind(config);

            //set default authentication schemes
            var authenticationBuilder = services.AddAuthentication(options =>
            {
                options.DefaultScheme       = GrandCookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = GrandCookieAuthenticationDefaults.ExternalAuthenticationScheme;
            });

            //add main cookie authentication
            authenticationBuilder.AddCookie(GrandCookieAuthenticationDefaults.AuthenticationScheme, options =>
            {
                options.Cookie.Name      = config.CookiePrefix + GrandCookieAuthenticationDefaults.AuthenticationScheme;
                options.Cookie.HttpOnly  = true;
                options.LoginPath        = GrandCookieAuthenticationDefaults.LoginPath;
                options.AccessDeniedPath = GrandCookieAuthenticationDefaults.AccessDeniedPath;

                options.Cookie.SecurePolicy = config.CookieSecurePolicyAlways ? CookieSecurePolicy.Always : CookieSecurePolicy.SameAsRequest;
            });

            //add external authentication
            authenticationBuilder.AddCookie(GrandCookieAuthenticationDefaults.ExternalAuthenticationScheme, options =>
            {
                options.Cookie.Name         = config.CookiePrefix + GrandCookieAuthenticationDefaults.ExternalAuthenticationScheme;
                options.Cookie.HttpOnly     = true;
                options.LoginPath           = GrandCookieAuthenticationDefaults.LoginPath;
                options.AccessDeniedPath    = GrandCookieAuthenticationDefaults.AccessDeniedPath;
                options.Cookie.SecurePolicy = config.CookieSecurePolicyAlways ? CookieSecurePolicy.Always : CookieSecurePolicy.SameAsRequest;
            });

            //register external authentication plugins now
            var typeSearcher = new AppTypeSearcher();
            var externalAuthConfigurations = typeSearcher.ClassesOfType <IAuthenticationBuilder>();
            var externalAuthInstances      = externalAuthConfigurations
                                             .Where(x => PluginExtensions.OnlyInstalledPlugins(x))
                                             .Select(x => (IAuthenticationBuilder)Activator.CreateInstance(x))
                                             .OrderBy(x => x.Priority);

            //add new Authentication
            foreach (var instance in externalAuthInstances)
            {
                instance.AddAuthentication(authenticationBuilder, configuration);
            }
        }
Ejemplo n.º 3
0
        private void RegisterDependencies(ODataConventionModelBuilder builder, ApiConfig apiConfig)
        {
            var typeFinder = new AppTypeSearcher();

            //find dependency provided by other assemblies
            var dependencyInject = typeFinder.ClassesOfType <IDependencyEdmModel>();

            //create and sort instances of dependency inject
            var instances = dependencyInject
                            .Select(di => (IDependencyEdmModel)Activator.CreateInstance(di))
                            .OrderBy(di => di.Order);

            //register all provided dependencies
            foreach (var dependencyRegistrar in instances)
            {
                dependencyRegistrar.Register(builder, apiConfig);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Configure HTTP request pipeline
        /// </summary>
        /// <param name="application">Builder for configuring an application's request pipeline</param>
        /// <param name="webHostEnvironment">WebHostEnvironment</param>
        public static void ConfigureRequestPipeline(IApplicationBuilder application, IWebHostEnvironment webHostEnvironment)
        {
            //find startup configurations provided by other assemblies
            var typeSearcher          = new AppTypeSearcher();
            var startupConfigurations = typeSearcher.ClassesOfType <IStartupApplication>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Where(startup => PluginExtensions.OnlyInstalledPlugins(startup))
                            .Select(startup => (IStartupApplication)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Priority);

            //configure request pipeline
            foreach (var instance in instances)
            {
                instance.Configure(application, webHostEnvironment);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Add and configure any of the middleware
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration root of the application</param>
        public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            //database is already installed, so start scheduled tasks
            if (DataSettingsManager.DatabaseIsInstalled())
            {
                var typeSearcher  = new AppTypeSearcher();
                var scheduleTasks = typeSearcher.ClassesOfType <IScheduleTask>();

                var scheduleTasksInstalled = scheduleTasks
                                             .Where(t => PluginExtensions.OnlyInstalledPlugins(t)); //ignore not installed plugins

                foreach (var task in scheduleTasksInstalled)
                {
                    var assemblyName = task.Assembly.GetName().Name;
                    services.AddSingleton <IHostedService, BackgroundServiceTask>(sp =>
                    {
                        return(new BackgroundServiceTask($"{task.FullName}, {assemblyName}", sp));
                    });
                }
            }
        }
Ejemplo n.º 6
0
        public static void AddSettings(this IServiceCollection services)
        {
            var typeSearcher = new AppTypeSearcher();
            var settings     = typeSearcher.ClassesOfType <ISettings>();
            var instances    = settings.Select(x => (ISettings)Activator.CreateInstance(x));

            foreach (var item in instances)
            {
                services.AddScoped(item.GetType(), (x) =>
                {
                    var type           = item.GetType();
                    var storeId        = "";
                    var settingService = x.GetRequiredService <ISettingService>();
                    var store          = x.GetRequiredService <IStoreHelper>().HostStore;
                    if (store != null)
                    {
                        storeId = store.Id;
                    }

                    return(settingService.LoadSetting(type, storeId));
                });
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Add and configure services
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration root of the application</param>
        public static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            //register application
            var mvcBuilder = RegisterApplication(services, configuration);

            //register extensions
            RegisterExtensions(mvcBuilder, configuration);

            //find startup configurations provided by other assemblies
            var typeSearcher = new AppTypeSearcher();

            services.AddSingleton <ITypeSearcher>(typeSearcher);

            var startupConfigurations = typeSearcher.ClassesOfType <IStartupApplication>();

            //Register startup
            var instancesBefore = startupConfigurations
                                  .Where(startup => PluginExtensions.OnlyInstalledPlugins(startup))
                                  .Select(startup => (IStartupApplication)Activator.CreateInstance(startup))
                                  .Where(startup => startup.BeforeConfigure)
                                  .OrderBy(startup => startup.Priority);

            //configure services
            foreach (var instance in instancesBefore)
            {
                instance.ConfigureServices(services, configuration);
            }

            //register mapper configurations
            InitAutoMapper(typeSearcher);

            //add fluenvalidation
            AddFluentValidation(mvcBuilder, typeSearcher);

            //Register custom type converters
            RegisterTypeConverter(typeSearcher);

            var config = new AppConfig();

            configuration.GetSection("Application").Bind(config);

            //run startup tasks
            if (!config.IgnoreStartupTasks)
            {
                ExecuteStartupTasks(typeSearcher);
            }

            //add mediator
            AddMediator(services, typeSearcher);

            //Add MassTransit
            AddMassTransitRabbitMq(services, config, typeSearcher);

            //Register startup
            var instancesAfter = startupConfigurations
                                 .Where(startup => PluginExtensions.OnlyInstalledPlugins(startup))
                                 .Select(startup => (IStartupApplication)Activator.CreateInstance(startup))
                                 .Where(startup => !startup.BeforeConfigure)
                                 .OrderBy(startup => startup.Priority);

            //configure services
            foreach (var instance in instancesAfter)
            {
                instance.ConfigureServices(services, configuration);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Add Mass Transit rabitMq message broker
        /// </summary>
        /// <param name="services"></param>
        private static void AddMassTransitRabbitMq(IServiceCollection services, AppConfig config, AppTypeSearcher typeSearcher)
        {
            if (!config.RabbitEnabled)
            {
                return;
            }
            services.AddMassTransit(x =>
            {
                x.AddConsumers(q => !q.Equals(typeof(CacheMessageEventConsumer)), typeSearcher.GetAssemblies().ToArray());

                // reddits have more priority
                if (!config.RedisPubSubEnabled && config.RabbitCachePubSubEnabled)
                {
                    x.AddConsumer <CacheMessageEventConsumer>().Endpoint(t => t.Name = config.RabbitCacheReceiveEndpoint);
                }

                x.UsingRabbitMq((context, cfg) =>
                {
                    cfg.Host(config.RabbitHostName, config.RabbitVirtualHost, h =>
                    {
                        h.Password(config.RabbitPassword);
                        h.Username(config.RabbitUsername);
                    });
                    cfg.ConfigureEndpoints(context);
                });
            });
            //for automaticly start/stop bus
            services.AddMassTransitHostedService();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Adds services for mediatR
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        private static void AddMediator(this IServiceCollection services, AppTypeSearcher typeSearcher)
        {
            var assemblies = typeSearcher.GetAssemblies().ToArray();

            services.AddMediatR(assemblies);
        }