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
}