C# 依赖注入????

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ABCDEFG
{
    public class 依赖注入
    {
        public void test()
        {
            // 功能是 传递不同对象, 执行不同对象下的方法. ( 有隐式转换)

            //ServiceClassA serviceA = new ServiceClassA();  //创建 A对象
            //ServiceClassB serviceB = new ServiceClassB();   //创建B对象
            //ClientClass client = new ClientClass(); // 创建 客户端类对象
            //client.Set_ServiceImpl(serviceA);
            //client.ShowInfo();//结果:我是ServceClassA
            //client.Set_ServiceImpl(serviceB);
            //client.ShowInfo();//结果:我是ServceClassB
            //Console.ReadLine();


            //通过构造函数注入
            ServiceClassA serviceA = new ServiceClassA();  //创建 A对象
            ServiceClassB serviceB = new ServiceClassB();   //创建B对象
            ClientClass client = new ClientClass(serviceA); // 创建 客户端类对象
            client.ShowInfo();//结果:我是ServceClassA
            client = new ClientClass(serviceA);
            client.ShowInfo();//结果:我是ServceClassB
            Console.ReadLine();
        }
    }

    //internal    同一程序集内访问    
    //interface   接口
    interface IServiceClass  //定义 服务 接口类
    {
        String ServiceInfo();
    }
    class ServiceClassA : IServiceClass    //A继承接口 ; 实现方法
    {
        public String ServiceInfo()
        {
            return "我是ServceClassA";
        }
    }
    class ServiceClassB : IServiceClass   //B继承接口 ; 实现方法
    {
        public String ServiceInfo()
        {
            return "我是ServceClassB";
        }
    }


    #region ---Setter注入
    //class ClientClass   //定义 客户 接口类
    //{
    //    //注入点
    //    private IServiceClass _serviceImpl;  //声明接口变量
    //    //客户类中的方法,初始化注入点  
    //    public void Set_ServiceImpl(IServiceClass serviceImpl)
    //    {
    //        this._serviceImpl = serviceImpl;
    //    }
    //    public void ShowInfo()
    //    {
    //        Console.WriteLine(_serviceImpl.ServiceInfo());
    //    }
    //}
    #endregion

    #region --构造注入
    class ClientClass
    {
        private IServiceClass _serviceImpl;

        public ClientClass(IServiceClass serviceImpl)
        {
            this._serviceImpl = serviceImpl;
        }

        public void ShowInfo()
        {
            Console.WriteLine(_serviceImpl.ServiceInfo());
        }
    }

    #endregion
}

猜你喜欢

转载自www.cnblogs.com/enych/p/10500157.html
今日推荐