コード例 #1
0
ファイル: NopEngine.cs プロジェクト: LookBehind/nopCommerce
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="appSettings">App settings</param>
        public virtual void RegisterDependencies(IServiceCollection services, AppSettings appSettings)
        {
            var typeFinder = new WebAppTypeFinder();

            //register engine
            services.AddSingleton <IEngine>(this);

            //register type finder
            services.AddSingleton <ITypeFinder>(typeFinder);

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

            //create and sort instances of dependency registrars
            var instances = dependencyRegistrars
                            .Select(dependencyRegistrar => (IDependencyRegistrar)Activator.CreateInstance(dependencyRegistrar))
                            .OrderBy(dependencyRegistrar => dependencyRegistrar.Order);

            //register all provided dependencies
            foreach (var dependencyRegistrar in instances)
            {
                dependencyRegistrar.Register(services, typeFinder, appSettings);
            }

            services.AddSingleton(services);
        }
コード例 #2
0
ファイル: NopEngine.cs プロジェクト: ttgzs/Nop.Framework
        /// <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);
        }
コード例 #3
0
ファイル: NopEngine.cs プロジェクト: LookBehind/nopCommerce
        /// <summary>
        /// Add and configure services
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration of the application</param>
        public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            //find startup configurations provided by other assemblies
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <INopStartup>();

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

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

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

            //run startup tasks
            RunStartupTasks(typeFinder);

            //resolve assemblies here. otherwise, plugins can throw an exception when rendering views
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
        }
コード例 #4
0
ファイル: MyNopEngine.cs プロジェクト: NickJane/A_MyNop
        public void Initialize()
        {
            var builder = new ContainerBuilder();

            var typeFinder = new WebAppTypeFinder(); //containerManager.Resolve<ITypeFinder>();
            Action <ContainerBuilder> action = (x =>
            {
                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(x, typeFinder);
                }
            });

            action.Invoke(builder);


            container = builder.Build();

            System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container));                           //Set the MVC DependencyResolver
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); //设置mvc的依赖对象
        }
コード例 #5
0
ファイル: NopEngine.cs プロジェクト: ttgzs/Nop.Framework
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies(NopConfig config)
        {
            var builder = new ContainerBuilder();

            //dependencies
            var typeFinder = new WebAppTypeFinder();

            //不使用NopConfig来进行配置,注释
            //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>();
            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 dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
コード例 #6
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 <INopStartup>();

            //create and sort instances of startup configurations
            var instances = startupConfigurations
                            .Where(startup => PluginManager.FindPlugin(startup)?.Installed ?? true) //ignore not installed plugins
                            .Select(startup => (INopStartup)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 <NopConfig>();

            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)
            var fileProvider = Resolve <INopFileProvider>();

            AppDomain.CurrentDomain.SetData("DataDirectory", fileProvider.MapPath("~/App_Data/"));

            return(_serviceProvider);
        }
コード例 #7
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 <INopStartup>();

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

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

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

            // CAHNGED
            //register dependencies
            var nopConfig = services.BuildServiceProvider().GetService <NopConfig>();

            //RegisterDependencies(nopConfig, services, typeFinder);
            RegisterServices(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;

            return(_serviceProvider);
        }
コード例 #8
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 <IDependencyRegister>();
            var drInstances = new List <IDependencyRegister>();

            foreach (var startUpTaskType in drTypes)
            {
                drInstances.Add((IDependencyRegister)Activator.CreateInstance(startUpTaskType));
            }
            drInstances.AsQueryable().OrderBy(st => st.Order).ToList();
            foreach (var dependencyRegister in drInstances)
            {
                dependencyRegister.Register(builder, typeFinder, config);
            }
            builder.Update(container);

            //set dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
コード例 #9
0
ファイル: NopEngine.cs プロジェクト: zbjlala/MyNop
        /// <summary>
        /// Add and configure services
        /// 添加和配置服务
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration of the application</param>
        /// <param name="nopConfig">Nop configuration parameters</param>
        /// <returns>Service provider</returns>
        public IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration, NopConfig nopConfig)
        {
            //find startup configurations provided by other assemblies
            //查找其他程序集提供的启动配置
            var typeFinder            = new WebAppTypeFinder();
            var startupConfigurations = typeFinder.FindClassesOfType <INopStartup>();

            //create and sort instances of startup configurations
            //创建并排序启动配置实例
            var instances = startupConfigurations
                            .Select(startup => (INopStartup)Activator.CreateInstance(startup))
                            .OrderBy(startup => startup.Order);

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

            //register mapper configurations
            //添加AutoMapper映射
            AddAutoMapper(services, typeFinder);

            //register dependencies
            //注册依赖项
            RegisterDependencies(services, typeFinder, nopConfig);

            //run startup tasks
            //运行启动任务
            RunStartupTasks(typeFinder);

            //resolve assemblies here. otherwise, plugins can throw an exception when rendering views
            //解决程序集。否则,插件在呈现视图时可能引发异常
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            return(_serviceProvider);
        }
コード例 #10
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies(NopConfig config)
        {
            var builder = new ContainerBuilder();

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

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

            builder.Register(c => AutoMapperConfiguration.Mapper).SingleInstance();
            builder.Register(c => AutoMapperConfiguration.MapperConfiguration).SingleInstance();
            //====================================================================

            var container = builder.Build();

            this._containerManager = new ContainerManager(container);

            //set dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
コード例 #11
0
        /// <summary>
        /// Register dependencies
        /// 注册依赖(基于Autofac依赖注入框架)
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies(NopConfig config)
        {
            /*
             * 1、ContainerBuilder:组件通过它来进行注册。
             * 2、组件,对象需要从组件中来获取。
             * 3、哪些元素可以作为组件:Lambda表达式,一个类型,一个预编译的实例,实例类型所在的程序集。
             * 4、容器:ContainerBuilder的Build()方法可以创建容器,从容器的Resolve()方法能够获得对象。
             * 5、为指定组件服务是某一接口:As()方法将用于注册时指定。
             * 6、组件的依赖关系:组件的依赖关系主要通过接口实现。
             */

            //创建组件容器
            var builder = new ContainerBuilder();

            //注册依赖
            //dependencies
            var typeFinder = new WebAppTypeFinder();

            //注册对象实例,并指定作为单例使用。
            builder.RegisterInstance(config).As <NopConfig>().SingleInstance();       //Nop配置
            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 (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 dependency resolver
            // ???
            //使用指定的依赖关系解析程序接口,为依赖关系解析程序提供一个注册点。
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            //DependencyResolver
            //为实现 IDependencyResolver 或常用服务定位器 IServiceLocator 接口的依赖关系解析程序提供一个注册点。


            //Autofac.Integration.WebApi;
            //// Set the dependency resolver for Web API.
            //var webApiResolver = new AutofacWebApiDependencyResolver(container);
            //GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;

            //// Set the dependency resolver for MVC.
            //var resolver = new AutofacDependencyResolver(container);
            //DependencyResolver.SetResolver(resolver);
        }
コード例 #12
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies()
        {
            #region Autofac 3.5版

            /*
             * 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<ScdConfig>().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);
             *
             * //注册webapi容器
             * //参考:http://www.cnblogs.com/daisy-popule/p/4126599.html
             * builder = new ContainerBuilder();
             * Assembly webApiAssembly = Assembly.Load("Scd.WebAPI");
             * builder.RegisterApiControllers(webApiAssembly);//注册api容器的实现
             * builder.Update(container);
             *
             * GlobalConfiguration.Configuration.DependencyResolver
             *   = new AutofacWebApiDependencyResolver(container);//注册api容器
             *
             * //set dependency resolver
             * DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
             */
            #endregion

            var builder = new ContainerBuilder();
            //dependencies
            var typeFinder = new WebAppTypeFinder();
            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 (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);
            }

            try
            {
                //注册webapi容器
                Assembly webApiAssembly = Assembly.Load("Nop.WebAPI");
                builder.RegisterApiControllers(webApiAssembly);//注册api容器的实现
            }
            catch
            {
                //单元测试的时候,加载不到这个dll
            }

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

            GlobalConfiguration.Configuration.DependencyResolver
                = new AutofacWebApiDependencyResolver(container);//注册api容器

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