提前声明哈,这是个简单的实例, 目的是让我们了解一下  当前类是怎么通过 统一的父类 来操作其他类 对象的  。

非得定义接口(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

Ioc 控制反转 实例的更多相关文章

  1. Spring IoC控制反转创建实例

    Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...

  2. 谈谈php里的IOC控制反转,DI依赖注入

    理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...

  3. IoC实践--用Autofac实现MVC5.0的IoC控制反转方法

    Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Con ...

  4. Spring学习之Ioc控制反转(2)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  5. Spring详解(二)------IOC控制反转

    我相信提到 Spring,很多人会脱口而出IOC(控制反转).DI(依赖注入).AOP等等概念,这些概念也是面试官经常问到的知识点.那么这篇博客我们就来详细的讲解 IOC控制反转. ps:本篇博客源码 ...

  6. IOC 控制反转(Inversion of Control,英文缩写为IoC)

    在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 在这样的齿轮组中,因为是协同工作,如果有一个齿轮出了问题,就可能会影响到整个齿 ...

  7. .NET之IOC控制反转运用

    当前场景: 如果有不同的用户.使用同一个系统.而不同的客户有某些不同的需求.在不改变系统主体的情况下,可以直接使用IOC控制反转依赖搭建项目 1.添加接口层 目前里面只有一个会员的类.里面有一个登录接 ...

  8. 【设计模式】不同设计模式体现IOC控制反转

    使用过Spring的开发者应该都对IOC控制反转功能有所了解,最开始学习时应该都知道使用依赖注入来实现IOC的功能,本文来介绍使用IOC控制反转思想的几种设计模式. 依赖注入来实现IOC 注入依赖是I ...

  9. Spring Boot笔记十:IOC控制反转

    目录 IOC控制反转和DI依赖注入 IOC实现Hello World Spring IOC容器怎么知道哪些是管理的对象? IOC容器getBean方法的三种签名 xml配置文件的import导入 @A ...

随机推荐

  1. fill的用法

    for(int i=0;i<=10;i++) num[i]=i ; fill(num+1,num+1+5,2) ; for(int i=0;i<=10;i++) printf(" ...

  2. Cocos2d-x 3.0 事件系统【转】

    事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户 ...

  3. MFC中,如何自定义用户消息

    1.用处 在多个类之间传递消息.当需要响应用户操作,本类却无法实现时,可以向系统发出消息.然后让系统中的需要的位置实现它. 2.方法 2.1定义这个消息,并让拥有者发送这个这个消息,传递一个整型参数 ...

  4. android 操作sqlite的一点小技巧

    1.android 在sqlite插入数据时,是非常耗时的操作,原因是sqlite缺省会为每个插入操作开启一个事务,当数量变多的时候,自然时间就变得很慢,这时候可以考虑在插入等操作时先开启一个事务,再 ...

  5. TortoiseSVN期望文件系统格式在“1”到“6”之间;发现格式“7”

    安装好Subversion和TortoiseSVN之后.检出和浏览版本库的时候一直报错 "期望文件系统格式在"1"到"6"之间;发现格式"7 ...

  6. hough变换

    //c.h typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned int DWORD;typedef long ...

  7. webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server

    一.webpack基础 1.在项目中生成package.json:在项目根目录中输入npm init,根据提示输入相应信息.(也可以不生成package.json文件,但是package.json是很 ...

  8. AX2012全新的批处理方式

    AX2009 的批处理操作我们是通过RunBaseBatch framework,我们所要做的事情就是继承RunBaseBatch class,实现里面该实现的方法来执行批处理. AX2012 的批处 ...

  9. linux程序调试常用命令

    1 调用跟踪 跟踪系统调用 strace ls –l 跟踪库调用  ltrace 2 lsof(list open file) 查看程序命令打开了哪些文件  lsof –p PID; lsof –c ...

  10. mysql 常用sql操作语句

    获取数据库里所有表 SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' 获取表里 ...