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