在文章 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 - 博客园
网友评论