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

非得定义接口(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. RDD中cache和persist的区别

    通过观察RDD.scala源代码即可知道cache和persist的区别: def persist(newLevel: StorageLevel): this.type = { if (storage ...

  2. 类成员函数指针 ->*语法剖析

    在cocos2d-x中,经常会出现这样的调用,如 ->*,这个是什么意思呢,如下面得这个例子: , 其实这是对类的成员函数指针的调用,在cocos2dx中,这种形式多用于回调函数的调用.如我们经 ...

  3. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  4. JS获取当前文件所在的文件夹全路径

    var js = document.scripts; js = js[js.length - 1].src.substring(0, js[js.length - 1].src.lastIndexOf ...

  5. windows 服务的启动与安装

    在使用windows 操作系统时,我们对windows服务再也熟悉不过了,这些服务有的是系统层的,有的是应用层的,大部分都是运行在桌面的后台,可以在进程中看到,有时候在做web项目时,在站点启动时要启 ...

  6. spring batch学习笔记

    Spring Batch是什么?       Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...

  7. WWF3XOML方式创建和启动工作流 <第十篇>

    一.XOML使用工作流的好处 通过Xoml方式使用工作流的好处在于,它能够不重新启动程序的情况下,仅仅通过配置xoml就能够实现改变工作流,非常灵活. 创建一个WinForm程序如下: 代码如下: n ...

  8. JS常用的设计模式(11)—— 中介者模式

    中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互. 打个比方,军火买卖双方为了安全起见,找了一个信任的中介来进行交易.买家A把钱交给中介B,然后从中 ...

  9. linux 下安装 搭建 svn服务器

    1.下载svn http://subversion.apache.org/download 下载完成后解压,执行 ./configure --prefix=/usr/svn 提示 configure: ...

  10. ORA-12518 TNS:监听程序无法分发客户机连接 解决办法

    查询的脚本: select count(*) from v$process; --取得数据库目前的进程数. select value from v$parameter where name = 'pr ...