美文网首页C#技术干货
C#依赖注入- setter注入

C#依赖注入- setter注入

作者: 张中华 | 来源:发表于2019-05-18 18:04 被阅读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 - 博客园


    相关文章

      网友评论

        本文标题:C#依赖注入- setter注入

        本文链接:https://www.haomeiwen.com/subject/xyeuoqtx.html