服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2025-02-21 09afa6099b919a3a33cf4e1796dc5f6e66b4993b
Tiger.Api/Autofac/AutoFacContianer.cs
@@ -22,6 +22,7 @@
        /// 容器
        /// </summary>
        public static IContainer Instance;
        public static AppDomain AppDomain;
        /// <summary>
        /// 初始化容器
@@ -39,28 +40,35 @@
        /// <param name="builder"></param>
        public static void Build(ContainerBuilder builder)
        {
            var assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Tiger.Business.dll");
            //注入Tiger.Business.dll
            builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces();
            ////注入Tiger.Business.dll
            //var assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Tiger.Business.dll");
            //builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces();
            #region 动态加载多个dll
            //string[] assemblyScanerPattern = new[] { @"MyModule.*.dll"};
            string[] assemblyPattern = new[] { "Tiger.Business([.].*)*.dll" };
            //// Make sure process paths are same...
            //Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            //AppDomain = AppDomain.CreateDomain("AutoFac Dll");
            //List<Assembly> assemblies = new List<Assembly>();
            //foreach (var file in Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll", SearchOption.AllDirectories).Where(filename => assemblyPattern.Any(pattern => Regex.IsMatch(filename, pattern))))
            //{
            //    var assembly = AppDomain.Load(Assembly.LoadFrom(file).GetName());
            //    assemblies.Add(assembly);
            //}
            //// 1. Scan for assemblies containing autofac modules in the bin folder
            // 1. Scan for assemblies containing autofac modules in the bin folder
            //List<Assembly> assemblies = new List<Assembly>();
            //assemblies.AddRange(
            //    Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories)
            //             .Where(filename => assemblyScanerPattern.Any(pattern => Regex.IsMatch(filename, pattern)))
            //             .Select(Assembly.LoadFrom)
            //    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();
            //}
            var assemblies = PluginManager.Load(AppDomain.CurrentDomain.BaseDirectory, "Tiger.Business([.].*)*.dll");
            foreach (var assembly in assemblies)
            {
                builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces();
            }
            #endregion
            //读取配置文件,把配置关系装载到ContainerBuilder
@@ -99,5 +107,10 @@
        {
            return AutoFacContainer.Instance.Resolve<T>();
        }
        public static dynamic Resolve(string typeFullName)
        {
            return AutoFacContainer.Instance.Resolve(System.Type.GetType(typeFullName, true));
        }
    }
}