C#中依赖注入

因为客户类只依赖于服务类的一个接口,而不依赖于具体服务类,因此客户只定义一个注入点。在程序运行过程当中,客户类部直接实例化具体服务类实例,而是客户类的运行上下文环境或者专门组建负责实例化服务类,而后将其注入到客户类中,保证客户类的正常运行。函数

 

依赖注入的方法大体分为3中:接口注入、构造方法注入、setter注入;this

一、setter注入spa

setter注入是指客户类中设置一个服务类接口类型的数据成员,并设置一个set方法做为注入点,这个set方法接收一个剧吐的服务类实例为参数,并将它赋给接口类型的数据成员。具体实例以下:code

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1.SetterInjection
{
    interface IServiceClass
    {
        string ServiceInfo();
    }


    internal class ServiceClassA:IServiceClass
    {
        public string ServiceInfo() => "类A";
    }
    internal class ServiceClassB:IServiceClass
    {
        public string ServiceInfo() => "类B";
    }
    internal class ClientClass
    {
        private IServiceClass _serviceClass;
        public void Set_Service(IServiceClass service)
        {
            this._serviceClass = service;
        }
        public void ShowInfo()
        {
            Console.WriteLine(_serviceClass.ServiceInfo());

        }
    }
}

 

 

二、构造函数注入接口

经过客户类的构造函数想客户注入服务类实例。内存

构造注入是指在客户类中,设置一个服务类接口的数据成员,并以构造函数为注入点,这个构造函数接收一个具体的服务类实例参数,并将它赋给服务类接口类型的数据成员。get

具体代码实例以下:string

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1.SetterInjection
{
    interface IServiceClass
    {
        string ServiceInfo();
    }


    internal class ServiceClassA:IServiceClass
    {
        public string ServiceInfo() => "类A";
    }
    internal class ServiceClassB:IServiceClass
    {
        public string ServiceInfo() => "类B";
    }
    
    internal class ClientClassInjection
    {
        private IServiceClass _service;
        public ClientClassInjection(IServiceClass service) => _service = service;
        public void ShowInfo()
        {
            Console.WriteLine(_service.ServiceInfo());
        }
    }
}

 

 

三、接口注入it

接口是一种约束、是一种规范,具体实例代码以下:io

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp1.IOC
{
    //硬盘接口
    interface IHardDisk
    {
        string Name { get; }//硬盘的名字属性
        void Read();//读数据方法
        void Write(string str);//写数据方法
    }
    internal class HardDisk200 : IHardDisk
    {
        public string Name { get => "200G内存的硬盘";  }

        public void Read()
        {
            Console.WriteLine("我能够写入数据。。。。。。。");
        }

        public void Write(string str)
        {
            Console.WriteLine(str);
        }
    }


    internal class HardDisk1T:IHardDisk
    {
        public string Name => "1T内存的硬盘";
        public void Read()
        {
            Console.WriteLine("我能够写入数据。。。。。。。");
        }

        public void Write(string str)
        {
            Console.WriteLine(str);
        }
    }


    public class Test
    {
        public static void test()
        {
            IHardDisk hardDisk = new HardDisk200();
            hardDisk.Read();
            hardDisk.Write(hardDisk.Name + "我能够写入数据");
            Console.Read();
        }
    }
}
相关文章
相关标签/搜索