C#技术干货

C#依赖注入- setter注入

2019-05-18  本文已影响3人  张中华

在文章 C#依赖注入-初步概念了解 中,简单的介绍了依赖注入常用三种方式:setter注入,构造函数注入,接口注入。
在此文章中,使用代码具化对setter注入的解释。

setter注入:
就是在类A里面定义一个C接口的属性D,在A的上下文通过B实例化一个对象,然后将这个对象赋值给属性D。主要就是set 与 get

Setter注入(Setter Injection)是指在客户类中,设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。

实例Code:

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

namespace SetterInjection
{
    // 首先定义一个接口
    internal interface IServiceClass
    {
        String ServiceInfo();
    }

    // 定义一个类,实现接口IServiceClass, 并实现方法ServiceInfo, return "我是ServceClassA"
    internal class ServiceClassA : IServiceClass
    {
        public String ServiceInfo()
        {
            return "我是ServceClassA";
        }
    }
    // 再定义一个类, 实现接口IServiceClass, 并实现方法ServiceInfo, return "我是ServceClassB"
    internal class ServiceClassB : IServiceClass
    {
        public String ServiceInfo()
        {
            return "我是ServceClassB";
        }
    }

    // 定义一个Client类,实现接口注入
    internal class ClientClass
    {
        //注入点
        private IServiceClass _serviceImpl;
        //客户类中的方法,初始化注入点  
        public void Set_ServiceImpl(IServiceClass serviceImpl)
        {
            this._serviceImpl = serviceImpl;
        }

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

    class Program
    {
        static void Main(string[] args)
        {
            IServiceClass serviceA = new ServiceClassA();
            IServiceClass serviceB = new ServiceClassB();

            ClientClass client = new ClientClass();

            client.Set_ServiceImpl(serviceA);
            client.ShowInfo();//结果:我是ServceClassA
            client.Set_ServiceImpl(serviceB);
            client.ShowInfo();//结果:我是ServceClassB

            Console.ReadLine();
        }
    }
}
Result

参考网址: C# 依赖注入 - 一杯水M - 博客园


上一篇下一篇

猜你喜欢

热点阅读