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 ...
随机推荐
- php文件删除unlink()详解
请记住从PHP文件创建的教训,我们创建了一个文件,名为testFile.txt . $myFile = "testFile.txt"; $fh = fopen($myFile, ' ...
- Android——getSystemService
android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监 听是否有SD卡安装及移除,ClipboardServi ...
- Spark ThriftServer使用的大坑
当用beeline连接default后,通过use xxx切换到其他数据库,再退出, 再次使用beeline -u jdbc:hive2://hadoop000:10000/default -n sp ...
- JSP SQL注入
Login.JSP <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- Linux系统自启动脚本
只需编辑/etc/init.d/rc.local文件,在最后加上你的脚本即可.比如:我已经编写了一个脚本shell.sh,存放在/home/mars704/Desktop/ 下面在终端输入 gedit ...
- 个人收集(转载)CSS中 display:none和visibility:hidden的区别
visibility和display两个属性都有隐藏元素的功能,display:none和visibility:hidden的区别,简单的总结一句话就是:visibility:hidden隐藏,但在浏 ...
- [翻译]你不会想知道的kobject,kset,和ktypes
---------------------------------------------------------------------------------------------------- ...
- abstract 和 interfaces 的用法注意事项
abstract : abstract class calssname{} 1.abstract也可也修饰普通的类,这样的目的是为了防止用这个类来创建对象: 2.abstract中的abstract ...
- CSS: word-wrap和word-break
最近修改页面排版的一些问题,发现关于内容分词换行有两个主要的CSS: word-wrap 和 word-break 特别是word-wrap还有个取值break-word,更使得这两个属性容易混淆. ...
- CentOS6 更改Mysql数据库的数据存放位置
mysql使用yum安装时,默认的数据是存储在/var/lib/mysql下.一般情况下,为了数据的安全性,建议将mysql数据库的数据文件存储在系统的第二块磁盘上的目录下可以按照以下步骤进行操作: ...