Example #1
0
        /// <summary>
        /// Add and configure services
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration root of the application</param>
        /// <returns>Service provider</returns>
        public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            //find startup configurations provided by other assemblies
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <IGrandStartup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Where(startup => PluginManager.FindPlugin(startup).Return(plugin => plugin.Installed, true)) //ignore not installed plugins
                            .Select(startup => (IGrandStartup)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Order);

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

            //register mapper configurations
            AddAutoMapper(services, typeFinder);

            //Add attributes to register custom type converters
            RegisterTypeConverter();

            var config = new GrandConfig();

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

            //run startup tasks
            if (!config.IgnoreStartupTasks)
            {
                RunStartupTasks(typeFinder);
            }
        }
Example #2
0
        /// <summary>
        /// ConfigureContainer is where you can register things directly
        /// with Autofac. This runs after ConfigureServices so the things
        /// here will override registrations made in ConfigureServices.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="configuration"></param>
        public void ConfigureContainer(ContainerBuilder builder, IConfiguration configuration)
        {
            var typeFinder = new WebAppTypeFinder();

            //register type finder
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

            //find dependency registrars provided by other assemblies
            var dependencyRegistrars = typeFinder.FindClassesOfType <IDependencyRegistrar>();

            //create and sort instances of dependency registrars
            var instances = dependencyRegistrars
                            //.Where(startup => PluginManager.FindPlugin(startup).Return(plugin => plugin.Installed, true)) //ignore not installed plugins
                            .Select(dependencyRegistrar => (IDependencyRegistrar)Activator.CreateInstance(dependencyRegistrar))
                            .OrderBy(dependencyRegistrar => dependencyRegistrar.Order);

            var config = new GrandConfig();

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

            //register all provided dependencies
            foreach (var dependencyRegistrar in instances)
            {
                dependencyRegistrar.Register(builder, typeFinder, config);
            }
        }
Example #3
0
        /// <summary>
        /// Add and configure services
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration root of the application</param>
        /// <returns>Service provider</returns>
        public IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            //find startup configurations provided by other assemblies
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <IGrandStartup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Where(startup => PluginManager.FindPlugin(startup).Return(plugin => plugin.Installed, true)) //ignore not installed plugins
                            .Select(startup => (IGrandStartup)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Order);

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

            //register mapper configurations
            AddAutoMapper(services, typeFinder);

            //register dependencies
            var grandConfig = services.BuildServiceProvider().GetService <GrandConfig>();

            RegisterDependencies(grandConfig, services, typeFinder);

            //run startup tasks
            if (!grandConfig.IgnoreStartupTasks)
            {
                RunStartupTasks(typeFinder);
            }

            return(_serviceProvider);
        }
Example #4
0
        /// <summary>
        /// Register mapping
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterMapperConfiguration(GrandConfig config)
        {
            //dependencies
            var typeFinder = new WebAppTypeFinder();

            //register mapper configurations provided by other assemblies
            var mcTypes     = typeFinder.FindClassesOfType <IMapperConfiguration>();
            var mcInstances = new List <IMapperConfiguration>();

            foreach (var mcType in mcTypes)
            {
                mcInstances.Add((IMapperConfiguration)Activator.CreateInstance(mcType));
            }
            //sort
            mcInstances = mcInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            //get configurations
            var configurationActions = new List <Action <IMapperConfigurationExpression> >();

            foreach (var mc in mcInstances)
            {
                configurationActions.Add(mc.GetConfiguration());
            }
            //register
            AutoMapperConfiguration.Init(configurationActions);
        }
Example #5
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 void ConfigureRequestPipeline(IApplicationBuilder application, IWebHostEnvironment webHostEnvironment)
        {
            //find startup configurations provided by other assemblies
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <IGrandStartup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Where(startup => PluginManager.FindPlugin(startup).Return(plugin => plugin.Installed, true)) //ignore not installed plugins
                            .Select(startup => (IGrandStartup)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Order);

            //configure request pipeline
            foreach (var instance in instances)
            {
                instance.Configure(application, webHostEnvironment);
            }
        }
Example #6
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies(NopConfig config)
        {
            var builder   = new ContainerBuilder();
            var container = builder.Build();

            this._containerManager = new ContainerManager(container);

            //we create new instance of ContainerBuilder
            //because Build() or Update() method can only be called once on a ContainerBuilder.

            //dependencies
            var typeFinder = new WebAppTypeFinder();

            builder = new ContainerBuilder();
            builder.RegisterInstance(config).As <NopConfig>().SingleInstance();
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();
            builder.Update(container);

            //register dependencies provided by other assemblies
            builder = new ContainerBuilder();
            var drTypes     = typeFinder.FindClassesOfType <IDependencyRegistrar>();
            var drInstances = new List <IDependencyRegistrar>();

            foreach (var drType in drTypes)
            {
                drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
            }
            //sort
            drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            foreach (var dependencyRegistrar in drInstances)
            {
                dependencyRegistrar.Register(builder, typeFinder, config);
            }
            builder.Update(container);

            //set dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
Example #7
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        public virtual void RegisterDependencies(GrandConfig config, IServiceCollection services, out IContainer applicationContainer, /*out RoutePublisher routePublisher, */ out AutofacServiceProvider autofacServiceProvider)
        {
            //again new
            var typeFinder = new WebAppTypeFinder();
            var builder    = new ContainerBuilder();

            builder.RegisterInstance(config).As <GrandConfig>().SingleInstance();
            builder.RegisterInstance(/*Singleton<IEngine>.Instance*/ this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();



            //it needs to be here
            //builder.RegisterType<RoutePublisher>().As<IRoutePublisher>().SingleInstance();
            //routePublisher = new RoutePublisher(typeFinder);
            //builder.RegisterInstance(routePublisher).As<IRoutePublisher>().SingleInstance();



            //register dependencies provided by other assemblies
            var drTypes     = typeFinder.FindClassesOfType <IDependencyRegistrar>();
            var drInstances = new List <IDependencyRegistrar>();

            foreach (var drType in drTypes)
            {
                drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
            }

            //sort
            drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            foreach (var dependencyRegistrar in drInstances)
            {
                dependencyRegistrar.Register(builder, typeFinder, config);
            }

            builder.Populate(services);
            applicationContainer = builder.Build();


            //one extra line
            this._containerManager = new ContainerManager(applicationContainer);



            //here should be EngineContextExperimental
            //return new AutofacServiceProvider(applicationContainer);
            //hope it'll get thing done
            autofacServiceProvider = new AutofacServiceProvider(applicationContainer);



            ////code below should be inside GrandEngine.RegisterDependencies() but i need autofac object here
            ////so here begins registration of services from service business layer
            ////dependencies
            //var typeFinder = new WebAppTypeFinder();
            //var builder = new ContainerBuilder();
            ////let's register some simple Service and use it in Controller
            ////builder.RegisterType<Randomizer>().As<IRandomizer>().InstancePerLifetimeScope();

            //builder.RegisterInstance(config).As<GrandConfig>().SingleInstance();
            //builder.RegisterInstance(Singleton<IEngine>.Instance/*this*/).As<IEngine>().SingleInstance();
            //builder.RegisterInstance(typeFinder).As<ITypeFinder>().SingleInstance();


            ////it needs to be here
            ////builder.RegisterType<RoutePublisher>().As<IRoutePublisher>().SingleInstance();
            //routePublisher = new RoutePublisher(typeFinder);
            //builder.RegisterInstance(routePublisher).As<IRoutePublisher>().SingleInstance();


            ////so get now something

            ////register dependencies provided by other assemblies
            //var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();
            //var drInstances = new List<IDependencyRegistrar>();
            //foreach (var drType in drTypes)
            //    drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));

            ////sort
            //drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            //foreach (var dependencyRegistrar in drInstances)
            //    dependencyRegistrar.Register(builder, typeFinder, config);

            ////var container = builder.Build();
            ////this._containerManager = new ContainerManager(container);


            //builder.Populate(services);
            //applicationContainer = builder.Build();
            //this._containerManager = new ContainerManager(applicationContainer);



            //since this Method has no references, I imply that it is being called by framework
            //here should be EngineContextExperimental



            //  var builder = new ContainerBuilder();
            //  //we create new instance of ContainerBuilder
            //  //because Build() or Update() method can only be called once on a ContainerBuilder.


            //  //dependencies
            //  var typeFinder = new WebAppTypeFinder();
            //  builder = new ContainerBuilder();
            //  builder.RegisterInstance(config).As<GrandConfig>().SingleInstance();
            //  builder.RegisterInstance(this).As<IEngine>().SingleInstance();
            //  builder.RegisterInstance(typeFinder).As<ITypeFinder>().SingleInstance();

            //  //register dependencies provided by other assemblies
            //var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();
            //  var drInstances = new List<IDependencyRegistrar>();
            //  foreach (Type drType in drTypes)
            //      drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));

            //  //sort
            //  drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            //  foreach (var dependencyRegistrar in drInstances)
            //      dependencyRegistrar.Register(builder, typeFinder, config);

            //  var container = builder.Build();
            //  this._containerManager = new ContainerManager(container);

            //  //set dependency resolver
            //  DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }