using Autofac; using Autofac.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.Configuration; using Tiger.IBusiness; using System.Reflection; using System.IO; using System; using Rhea.Common; using System.Text.RegularExpressions; using System.Linq; using System.Collections.Generic; namespace Tiger.Api { /// /// AutoFac容器类 /// public static class AutoFacContainer { /// /// 容器 /// public static IContainer Instance; /// /// 初始化容器 /// /// public static void Init(ContainerBuilder builder) { //新建容器构建器,用于注册组件和服务 Build(builder); } /// /// AutoFac 配置文件注入 /// /// public static void Build(ContainerBuilder builder) { var assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Tiger.Business.dll"); //注入Tiger.Business.dll builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces(); #region 动态加载多个dll //string[] assemblyScanerPattern = new[] { @"MyModule.*.dll"}; //// Make sure process paths are same... //Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); //// 1. Scan for assemblies containing autofac modules in the bin folder //List assemblies = new List(); //assemblies.AddRange( // Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories) // .Where(filename => assemblyScanerPattern.Any(pattern => Regex.IsMatch(filename, pattern))) // .Select(Assembly.LoadFrom) //); //foreach (var assembly in assemblies) //{ // builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces(); //} #endregion //读取配置文件,把配置关系装载到ContainerBuilder var rootPath = new DirectoryInfo($"{AppDomain.CurrentDomain.BaseDirectory}Autofac"); if (rootPath.Exists) { var files = rootPath.GetFiles("*.json", SearchOption.AllDirectories); foreach (var file in files) { IConfigurationBuilder config = new ConfigurationBuilder(); IConfigurationSource autofacJsonConfigSource = new JsonConfigurationSource() { Path = file.FullName.Replace(AppDomain.CurrentDomain.BaseDirectory, ""), Optional = false,//boolean,默认就是false,可不写 ReloadOnChange = true,//同上 }; config.Add(autofacJsonConfigSource); ConfigurationModule module = new ConfigurationModule(config.Build()); builder.RegisterModule(module); } } //builder.RegisterType().As().InstancePerLifetimeScope(); //利用构建器创建容器 //Instance = builder.Build(); } } /// /// DI公用方法 /// public static class DI { public static T Resolve() where T : notnull { return AutoFacContainer.Instance.Resolve(); } } }