提前聲明哈,這是個簡單的實例, 目的是讓我們了解一下 當前類是怎么通過 統一的父類 來操作其他類 對象的 。
非得定義接口(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