zoukankan      html  css  js  c++  java
  • 关于反射

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

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

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

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

      

  • 相关阅读:
    【转-整理】win764bit plsql 登录oracle11g ora-12154 问题汇总
    【转-整理】log4j 简单解释,配置
    sparsity and density
    转:Recsys2013论文导读
    学院研究生论坛-如何做研究
    推荐系统开源软件列表
    linux下如何用GDB调试c++程序
    全国大学生数据挖掘邀请赛中的NDCG
    网络科学自学资料
    科普文:从人人网看网络科学(Network Science)的X个经典问题
  • 原文地址:https://www.cnblogs.com/zzz7/p/15499440.html
Copyright © 2011-2022 走看看