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
Ioc 控制反转 实例的更多相关文章
- Spring IoC控制反转创建实例
Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...
- 谈谈php里的IOC控制反转,DI依赖注入
理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...
- IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Con ...
- Spring学习之Ioc控制反转(2)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
- Spring详解(二)------IOC控制反转
我相信提到 Spring,很多人会脱口而出IOC(控制反转).DI(依赖注入).AOP等等概念,这些概念也是面试官经常问到的知识点.那么这篇博客我们就来详细的讲解 IOC控制反转. ps:本篇博客源码 ...
- IOC 控制反转(Inversion of Control,英文缩写为IoC)
在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 在这样的齿轮组中,因为是协同工作,如果有一个齿轮出了问题,就可能会影响到整个齿 ...
- .NET之IOC控制反转运用
当前场景: 如果有不同的用户.使用同一个系统.而不同的客户有某些不同的需求.在不改变系统主体的情况下,可以直接使用IOC控制反转依赖搭建项目 1.添加接口层 目前里面只有一个会员的类.里面有一个登录接 ...
- 【设计模式】不同设计模式体现IOC控制反转
使用过Spring的开发者应该都对IOC控制反转功能有所了解,最开始学习时应该都知道使用依赖注入来实现IOC的功能,本文来介绍使用IOC控制反转思想的几种设计模式. 依赖注入来实现IOC 注入依赖是I ...
- Spring Boot笔记十:IOC控制反转
目录 IOC控制反转和DI依赖注入 IOC实现Hello World Spring IOC容器怎么知道哪些是管理的对象? IOC容器getBean方法的三种签名 xml配置文件的import导入 @A ...
随机推荐
- 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(" ...
- Cocos2d-x 3.0 事件系统【转】
事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户 ...
- MFC中,如何自定义用户消息
1.用处 在多个类之间传递消息.当需要响应用户操作,本类却无法实现时,可以向系统发出消息.然后让系统中的需要的位置实现它. 2.方法 2.1定义这个消息,并让拥有者发送这个这个消息,传递一个整型参数 ...
- android 操作sqlite的一点小技巧
1.android 在sqlite插入数据时,是非常耗时的操作,原因是sqlite缺省会为每个插入操作开启一个事务,当数量变多的时候,自然时间就变得很慢,这时候可以考虑在插入等操作时先开启一个事务,再 ...
- TortoiseSVN期望文件系统格式在“1”到“6”之间;发现格式“7”
安装好Subversion和TortoiseSVN之后.检出和浏览版本库的时候一直报错 "期望文件系统格式在"1"到"6"之间;发现格式"7 ...
- hough变换
//c.h typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned int DWORD;typedef long ...
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
一.webpack基础 1.在项目中生成package.json:在项目根目录中输入npm init,根据提示输入相应信息.(也可以不生成package.json文件,但是package.json是很 ...
- AX2012全新的批处理方式
AX2009 的批处理操作我们是通过RunBaseBatch framework,我们所要做的事情就是继承RunBaseBatch class,实现里面该实现的方法来执行批处理. AX2012 的批处 ...
- linux程序调试常用命令
1 调用跟踪 跟踪系统调用 strace ls –l 跟踪库调用 ltrace 2 lsof(list open file) 查看程序命令打开了哪些文件 lsof –p PID; lsof –c ...
- mysql 常用sql操作语句
获取数据库里所有表 SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' 获取表里 ...