zoukankan      html  css  js  c++  java
  • 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  

  • 相关阅读:
    Hibernate中使用Spring Data JPA
    Spring Boot入门——全局异常处理
    Spring Boot入门——Redis
    Spring Boot入门——集成Mybatis
    Spring Boot入门——JDBCTemplate使用及其相关问题解决
    Spring Boot连接Mysql数据库问题解决
    Spring Boot入门——JPA
    Spring Boot入门——tomcat配置
    Spring Boot 配置文件
    启动图案配置
  • 原文地址:https://www.cnblogs.com/atliwen/p/3577847.html
Copyright © 2011-2022 走看看