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  

 

 

posted @ 2014-03-03 10:24  atliwen  阅读(4268)  评论(4编辑  收藏  举报