Asp.Net Core 实现服务的批量注册注入

-----------------Netcore依赖注入批量注册-------------
public static void AddAssembly(IServiceCollection service, string assemblyName = "NetCoreWebApi", ServiceLifetime serviceLifetime = ServiceLifetime.Singleton)
{
	var assembly = RuntimeHelper.GetAssemblyByName(assemblyName);
	var types = assembly.GetTypes();
	var list = types.Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType).ToList();
	foreach (var type in list)
	{
		var interfaceList = type.GetInterfaces();
		if (interfaceList.Any())
			{
				var inter = interfaceList.First();
				switch (serviceLifetime)
				{
				case ServiceLifetime.Transient:
				service.AddTransient(inter, type);
				break;
				case ServiceLifetime.Scoped:
				service.AddScoped(inter, type);
				break;
				case ServiceLifetime.Singleton:
				service.AddSingleton(inter, type);
				break;
		   }
     }
  }
}

public class RuntimeHelper
{
	//通过程序集的名称加载程序集
	public static Assembly GetAssemblyByName(string assemblyName)
	{
	    return AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(assemblyName));
	}
}

-----------------------------Startup文件中注册--------------------
public void ConfigureServices(IServiceCollection services)
{   
   Utils.AddAssembly(services);//批量注册
}

-----------------------------控制器调用---------------------------
/// <summary>
/// 
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class KaneController : Utils
{
	private readonly IKaneProxy ikaneproxy;

		/// <summary>
		/// 构造方法调用接口
		/// </summary>
		/// <param name="IKaneProxy"></param>
		public KaneController(IKaneProxy IKaneProxy)
		{
			ikaneproxy = IKaneProxy;
		}

		/// <summary>
		///依赖注入测试
		/// </summary>
		/// <returns></returns>
		[HttpPost]
		[Route("GetString")]
		public async Task<IActionResult> GetWay()
		{
			var json = new Dictionary<string, object>(); //定义返回数据
			var courseList = await ikaneproxy.GetWay();
			json.Add("course_list", string.Join(",", courseList));
			return ToSuccessResult<object>(json, "Success");
		}
}
上一篇:源码分析1


下一篇:计算机视觉 | 面试题:43、OpenCV框架与图像插值算法