关于反射

一直是知道有反射这个功能,但是一直也没有用过,也不觉得反射有多好用。

只是知道在面试的时候,人家会问到,但也不知道他到底是干啥了,看了文档也就不明白。 

直到今天,看代码的时候,才深深体会到反射的好处。 

正常情况下依赖注入,需要使用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);
                }
            }
        }

  

posted @ 2021-11-02 16:02  YaShi  阅读(32)  评论(0编辑  收藏  举报