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

      

  • 相关阅读:
    最小生成树
    BZOJ3894:文理分科(最大流)(同BZoj3438)
    BZOJ3438:小M的作物 (最大闭合权图->最小割)
    BZOJ 1305:dance跳舞(二分+最大流)
    BZOJ1266:上学路线route (最短路+最小割)
    BZOJ1854:游戏(二分图匹配)
    【PowerOJ1738】最小路径覆盖
    【SPOJ839】Optimal Marks 网络流
    【USACO】AC自动机
    【国家集训队2011】聪聪可可 树分治
  • 原文地址:https://www.cnblogs.com/zzz7/p/15499440.html
Copyright © 2011-2022 走看看