一直是知道有反射这个功能,但是一直也没有用过,也不觉得反射有多好用。
只是知道在面试的时候,人家会问到,但也不知道他到底是干啥了,看了文档也就不明白。
直到今天,看代码的时候,才深深体会到反射的好处。
正常情况下依赖注入,需要使用IOC?
(1)在【Startup.cs】的【ConfigureServices】中注册服务;注册抽象和具体的依赖关系;
(2)通过构造函数进行依赖注入,自动得到服务的实例;
(3)调用;
在这个例子中需要在【Startup.cs】的【ConfigureServices】 添加很多Services.AddTransient<IA,A>();Services.AddTransient<IB,B>(); 加重了开发的工作。
同过以下反射功能就不用在管理 【Startup.cs】 中的内容。 一个方法就完成了,注入。
然后就能省去一个步骤。 开发者就省去很多的麻烦了。
public void AddAssembly(IServiceCollection service, string assemblyName , ServiceLifetime serviceLifetime = ServiceLifetime.Scoped) { var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(AppContext.BaseDirectory + $"{assemblyName}.dll"); var types = assembly.GetTypes(); var list = types.Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType && u.Namespace == "Xw.Zx.Core.Service").ToList(); list = list.Where(u => u.Name.Contains("Service")).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; } service.AddScoped(inter, type); } } }