Beispiel #1
0
        /// <summary>
        /// Registers all teh dependencies.
        /// </summary>
        /// <param name="config">The engine configurations.</param>
        protected virtual void RegisterDependencies(EngineConfig config)
        {
            var builder    = new ContainerBuilder();
            var typeFinder = new WebAppTypeFinder();

            // Core single instance dependencies.
            builder.RegisterInstance(config).As <EngineConfig>().SingleInstance();
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

            // Collects and registers dependencies from all the assemblies.
            var dependencyRegistarTypes     = typeFinder.FindClassesOfType <IDependencyRegistrar>();
            var dependencyRegistarInstances = dependencyRegistarTypes
                                              .Select(type => (IDependencyRegistrar)Activator.CreateInstance(type));

            dependencyRegistarInstances.OrderBy(instance => instance.Order);
            foreach (var instance in dependencyRegistarInstances)
            {
                instance.Register(builder, typeFinder, config);
            }

            // Initialize ContainerManager
            var container = builder.Build();

            ContainerManager = new ContainerManager(container);

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
Beispiel #2
0
        /// <summary>
        /// Add and configure services
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration 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 <IStartup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Select(startup => (IStartup)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Order);

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

            //register mapper configurations
            AddAutoMapper(typeFinder);

            //register dependencies
            RegisterDependencies(services, typeFinder);

            //resolve assemblies here. otherwise, plugins can throw an exception when rendering views
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            return(_serviceProvider);
        }
Beispiel #3
0
        protected virtual void RegisterDependencies()
        {
            var builder   = new ContainerBuilder();
            var container = builder.Build();

            //dependencies
            var typeFinder = new WebAppTypeFinder();

            builder = new ContainerBuilder();

            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();
            builder.Update(container);

            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);
            }
            builder.Update(container);

            _containerManager = new ContainerManager(container);

            //set dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
Beispiel #4
0
        /// <summary>
        /// 注册依赖项
        /// </summary>
        protected virtual void RegisterDependencies()
        {
            ContainerBuilder builder = new ContainerBuilder();

            // dependencies
            WebAppTypeFinder typeFinder = new WebAppTypeFinder();

            //builder.RegisterInstance(config).As<NopConfig>().SingleInstance();
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

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

            List <IDependencyRegistrar> 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);
            }

            Container             = builder.Build();
            this.ContainerManager = new ContainerManager(Container);

            // 设置依赖项解析器
            DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
        }
Beispiel #5
0
        /// <summary>
        /// Register mapping
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterMapperConfiguration(NopConfig 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);
        }
Beispiel #6
0
        protected virtual void RegisterMapperConfiguration(EngineConfig config)
        {
            var typeFinder = new WebAppTypeFinder();

            // Collects and registers dependencies from all the assemblies.
            var mapConfigTypes     = typeFinder.FindClassesOfType <IMapConfig>();
            var mapConfigInstances = mapConfigTypes
                                     .Select(type => (IMapConfig)Activator.CreateInstance(type));
            var configurationActions = mapConfigInstances
                                       .OrderBy(instance => instance.Order)
                                       .Select(instance => instance.GetConfiguration())
                                       .ToList();
        }
Beispiel #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>
        /// <returns>Service provider</returns>
        public IServiceProvider ConfigureServices(IServiceCollection services, IConfigurationRoot configuration)
        {
            //find startup configurations provided by other assemblies
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <ICh3Startup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Select(startup => (ICh3Startup)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 nopConfig = services.BuildServiceProvider().GetService <MSTConfig>();

            RegisterDependencies(nopConfig, services, typeFinder);

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

            //resolve assemblies here. otherwise, plugins can throw an exception when rendering views
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            //set App_Data path as base data directory (required to create and save SQL Server Compact database file in App_Data folder)
            AppDomain.CurrentDomain.SetData("DataDirectory", CommonHelper.MapPath("~/App_Data/"));

            return(_serviceProvider);
        }
Beispiel #8
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        public void RegisterDependencies(MyConfig config)
        {
            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 <MyConfig>().SingleInstance();
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

            //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);
            }

            var container = builder.Build();

            this._containerManager = new ContainerManager(container);
            //set controller dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            //set apicontroller dependency resolver
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }