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  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM