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);
                    }
                }
            }
    

      

  • 相关阅读:
    PC-BSD 9.2 发布,基于 FreeBSD 9.2
    Attic 0.8.1 发布,备份程序
    Apache Lucene 4.5 发布,Java 搜索引擎
    Linux Kernel 3.11.4/3.10.15/3.4.65/3.0.99
    Lucene 查询工具 LQT
    Rubinius 2.0 发布,Ruby 虚拟机
    Golang通过Thrift框架完美实现跨语言调用
    微软再次要求Google审查官方链接 称将进行调查
    TCPDF 6.0.036 发布,PHP 的 PDF 操作包
    libnode 0.4.0 发布,C++ 语言版的 Node.js
  • 原文地址:https://www.cnblogs.com/zzz7/p/15499440.html
Copyright © 2011-2022 走看看