inyección de la reflexión y de la dependencia

Reflexión (imprecisa - mantener el status quo)

Ningún nuevo operador puede crear objetos del mismo tipo, cada miembro de acceso al objeto, hay nuevo operador depende del tipo.
Programa es dinámicamente en tiempo de ejecución, no sólo puede cambiar el tipo, pero no está claro que el usuario puede ser operativo, por lo que el programa de la estática en la lista, pero no es una enumeración de cada tipo.

using System;
using System.Reflection;

namespace Driver_core
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            ITank tank=new LightTank(); 
            //不用静态类型
            var t=tank.GetType();//得到运行时动态类型的描述信息
            object o= Activator.CreateInstance(t);
            MethodInfo fire = t.GetMethod("Fire");
            MethodInfo run = t.GetMethod("Run");
            fire.Invoke(o, null);
            run.Invoke(o, null);
        }
    }


    class Driver
    {
        private IVehicle _vehicle;

        public Driver(IVehicle vehicle)
        {
            _vehicle = vehicle;
        }

        public void Drive()
        {
            _vehicle.Run();
        }


    }

    interface IVehicle
    { 
        void Run();
    }

    class Car:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("car is runnning!");
        }
    }

    class Truck:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("truck is running!");
        }
    }

    interface ITank
    {
        void Fire();
        void Run();
    }

    class LightTank:ITank
    {
        public void Fire()
        {
            Console.WriteLine("开炮");
        }

        public void Run()
        {
            Console.WriteLine("ka……ka……ka");
        }
    }
}

Y un conjunto de interfaz de reflexión

Características de la recogida y reflexión

inyección de dependencia

reflexión encapsulado.
Dependiendo de la introducción de denpendinjection

using System;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;

namespace Driver_core
{
    internal class Program
    {
        public static void Main(string[] args)
        {
           var sc=new ServiceCollection();//服务提供者(容器)
           sc.AddScoped(typeof(ITank),typeof(LightTank));//基接口动态类型描述,实现的类的类型
           var sp = sc.BuildServiceProvider();
           //从容器里去调用对象
           ITank tank = sp.GetService<ITank>();
           tank.Fire();
           tank.Run();
        }
    }


    class Driver
    {
        private IVehicle _vehicle;

        public Driver(IVehicle vehicle)
        {
            _vehicle = vehicle;
        }

        public void Drive()
        {
            _vehicle.Run();
        }


    }

    interface IVehicle
    { 
        void Run();
    }

    class Car:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("car is runnning!");
        }
    }

    class Truck:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("truck is running!");
        }
    }

    interface ITank
    {
        void Fire();
        void Run();
    }

    class LightTank:ITank
    {
        public void Fire()
        {
            Console.WriteLine("开炮");
        }

        public void Run()
        {
            Console.WriteLine("ka……ka……ka");
        }
    }
}

Supongo que te gusta

Origin www.cnblogs.com/lpxspring/p/12461539.html
Recomendado
Clasificación