Ioc 控制反转 实例
提前声明哈,这是个简单的实例, 目的是让我们了解一下 当前类是怎么通过 统一的父类 来操作其他类 对象的 。
非得定义接口(interface) ? 其实不是的 IOC 的接口其实是指的 提供使用的一个对象而已 ,并非 非得是接口。 只是接口看起来更加规范什么什么的。
这个小例子 你自己可以后续修改, 添加上 工厂模式,和仓储模式 那样就 才是个完整的 IOC
DI 认真百度过, 上面的代码从上往下看 那就是IOC ,使用的时候是从下往上看。那就的DI 。 话说 DI 就别纠结了。
--------------------------------------------------------我 是 分 隔 符 -------------------------------------------------------------------------------
吐槽的人太多了。写个完整点的 真心希望观看过的你给点意见。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { using System.Reflection; using System.Runtime.Remoting.Messaging; class Program { static void Main(string[] args) { Db d = new Db(); d.IDb.IExamples1.CwExamples1(); Console.ReadKey(); } } public class Db { private IWarehousing iDb; public IWarehousing IDb { get { if (this.iDb==null) { string serF = @"C:\Users\liwenpc\Documents\visual studio 2012\Projects\ConsoleApplication4\ConsoleApplication4\bin\Debug\ConsoleApplication4.exe"; string strFType = "ConsoleApplication4.Warehousing"; Assembly dal = Assembly.LoadFrom(serF); Type type = dal.GetType(strFType); IWarehousing Wh = Activator.CreateInstance(type) as IWarehousing; this.iDb = Wh.ShoW(); } return this.iDb; } } } public interface IWarehousing { IExamples1 IExamples1 { get; set; } IExamples2 IExamples2 { get; set; } IWarehousing ShoW(); } public interface IExamples2 { void CwExamples2(); } public interface IExamples1 { void CwExamples1(); } public class Warehousing : IWarehousing { public IWarehousing ShoW() { IWarehousing ds = CallContext.GetData(typeof(Warehousing).Name) as Warehousing; if (ds==null) { ds = new Warehousing(); CallContext.SetData(typeof(Warehousing).Name, ds); } return ds; } private IExamples1 iExamples1; public IExamples1 IExamples1 { get { if (this.iExamples1 ==null) { this.iExamples1 = new Examples1(); } return this.iExamples1; } set { this.iExamples1 = value; } } private IExamples2 iExamples2; public IExamples2 IExamples2 { get { if (this.iExamples2==null) { this.iExamples2 = new Examples2(); } return this.iExamples2; } set { this.iExamples2 = value; } } } public class Examples1 : IExamples1 { public void CwExamples1() { Console.WriteLine("我是实例1。。。"); } } public class Examples2 : IExamples2 { public void CwExamples2() { Console.WriteLine("我是实例2。。。"); } } }
我这次用就接口 用了反射 提高了 耦合
其实 最直接的 就是去看 spring IOC