1
0
Эх сурвалжийг харах

增加控制器注入,实现控制器中使用属性注入

zhontai 3 жил өмнө
parent
commit
5056e15bc6

+ 5 - 0
Admin.Core/Admin.Core.xml

@@ -1086,6 +1086,11 @@
             操作日志处理
             </summary>
         </member>
+        <member name="M:Admin.Core.RegisterModules.ControllerModule.#ctor">
+            <summary>
+            控制器注入
+            </summary>
+        </member>
         <member name="M:Admin.Core.RegisterModules.RepositoryModule.#ctor(System.String,System.String)">
             <summary>
             仓储注入

+ 29 - 0
Admin.Core/RegisterModules/ControllerModule.cs

@@ -0,0 +1,29 @@
+
+using Autofac;
+using Microsoft.AspNetCore.Mvc;
+using System.Linq;
+using System.Reflection;
+using Module = Autofac.Module;
+
+namespace Admin.Core.RegisterModules
+{
+    public class ControllerModule : Module
+    {
+        /// <summary>
+        /// 控制器注入
+        /// </summary>
+        public ControllerModule()
+        {
+        }
+
+        protected override void Load(ContainerBuilder builder)
+        {
+            var controllerTypes = Assembly.GetExecutingAssembly().GetExportedTypes()
+            .Where(type => typeof(ControllerBase).IsAssignableFrom(type))
+            .ToArray();
+
+            // 配置所有控制器均支持属性注入
+            builder.RegisterTypes(controllerTypes).PropertiesAutowired();
+        }
+    }
+}

+ 9 - 3
Admin.Core/RegisterModules/SingleInstanceModule.cs

@@ -23,17 +23,23 @@ namespace Admin.Core.RegisterModules
 
         protected override void Load(ContainerBuilder builder)
         {
+            // 获得要注入的程序集
+            Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
+                .Where(a => a.Name.StartsWith(_prefixName))
+                .Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
+
             //无接口注入单例
-            Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries.Where(a => a.Name.StartsWith(_prefixName)).Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
             builder.RegisterAssemblyTypes(assemblies)
             .Where(t => t.GetCustomAttribute<SingleInstanceAttribute>() != null)
-            .SingleInstance();
+            .SingleInstance()
+            .PropertiesAutowired();
 
             //有接口注入单例
             builder.RegisterAssemblyTypes(assemblies)
             .Where(t => t.GetCustomAttribute<SingleInstanceAttribute>() != null)
             .AsImplementedInterfaces()
-            .SingleInstance();
+            .SingleInstance()
+            .PropertiesAutowired();
         }
     }
 }

+ 5 - 1
Admin.Core/Startup.cs

@@ -344,7 +344,8 @@ namespace Admin.Core
                 options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                 //设置时间格式
                 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
-            });
+            })
+            .AddControllersAsServices();
 
             #endregion 控制器
 
@@ -384,6 +385,9 @@ namespace Admin.Core
 
             try
             {
+                // 控制器注入
+                builder.RegisterModule(new ControllerModule());
+
                 // 单例注入
                 builder.RegisterModule(new SingleInstanceModule());