zoukankan      html  css  js  c++  java
  • 反射应用——依赖注入

    首先我们要下载程序包

    然后添加引用:

    using Microsoft.Extensions.DependencyInjection;
    
    

    我们用到了:
    ServiceCollection()方法,
    AddScoped()方法,每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例

    我们通过AddScoped获得实例(对象)
    BuildServiceProvider()方法,

    GetService<>()方法,

    然后我们使用到的类依然是之前用过的坦克类

        class Program
        {
            static void Main(string[] args)
            {
                /*一次性注册*/
                var sc = new ServiceCollection();//接口的实现者就是服务的提供者,new 一个容器
                sc.AddScoped(typeof(ITank), typeof(Type99));//我们可以在Scoped里要对象,
                //[ITank是静态类型,type(ITank)是拿到动态描述]
                //AddScoped(接口类型(动态类型描述),哪个类实现接口(动态类型描述)),然后把一对类型放入容器
                var sp = sc.BuildServiceProvider();
                /*===============分割线================*/
                //分割线以下,代表在程序的各个地方只要能看到ServiceProvider,你都可以这么用而不再有new操作符,我们从Contener里要对象,比如:
                ITank tank = sp.GetService<ITank>();
                tank.Fire();
                tank.Run();
            }
        }
     interface IVehicle
        {
            void Run();
        }
     interface IWeapon
        {
            void Fire();
        }
    
        interface ITank:IVehicle,IWeapon
        {
        }
    
        class Type99 : ITank
        {
            public void Fire()
            {
                Console.WriteLine("Boom!");
            }
            public void Run()
            {
                Console.WriteLine("Ka!");
            }
        }
    

    好处:
    整个开发程序过程中,千千万万个地方用到ITank这个接口引用的实例,突然有一天程序升级,要求把type99(99式坦克)升级为type19D(19式对陆强化改二丁坦克),如果在程序中用的

    ITank tank = new type99();
    

    的话,程序中所有的new操作符后面的type99()都要改成type19D。但是我们不能保证所有new type99()都改为type19D,因为有些逻辑可能还是在使用new type99()
    通过依赖注入,我们就可以只在

    sc.AddScoped(typeof(ITank), typeof(Type99));
    

    改为

    sc.AddScoped(typeof(ITank), typeof(Type19D));
    

    这样所有使用的千千万万个对象都是从Contener中拿到的,没有使用new,所以就很方便完成了程序的改动。

  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11641732.html
Copyright © 2011-2022 走看看