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) { ////注入Tiger.Business.dll //var assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Tiger.Business.dll"); //builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces(); #region 动态加载多个dll string[] assemblyPattern = new[] { "Tiger.Business([.].*)*.dll" }; // 1. Scan for assemblies containing autofac modules in the bin folder List assemblies = new List(); assemblies.AddRange( Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll", SearchOption.AllDirectories) .Where(filename => assemblyPattern.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(); } } }