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 }