Unity IOC简单认知
看了不少IOC的文章。简单概念梳理下。
1.依赖,依赖倒置,控制反转(IOC),依赖注入
解释是仿照http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html的例子。
依赖:类和类之间的联系。例如播放器类依赖媒体文件类
依赖倒置:本来是A类依赖B类。现在创建IB接口类。让A和B不再互相依赖,A类只知道自己需要调用IB接口的类。例如实现媒体文件接口类。好处在于下次再有新的媒体文件, 播放器类不用重构。
控制反转:本来A类要调用B类就需要创建B类实例,A类要调用C类就需要创建C类实例,而现在具体是调用哪个实例是由配置控制。例如:创建媒体文件类的工作不再由播放器类来完成。Main方法配置去控制是MP3文件还是默认文件。
依赖注入:当创建调用者的时候,IOC容器会向调用注入被调用的实例,因此也称为依赖注入。例如IOC的构造函数注入
下面贴下代码:方便以后回忆的时候看。
class Program
{
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
container.RegisterType<IPlayer, WYYPlayer>();
container.RegisterType<IPlayer, DefalutPlayer>();
container.RegisterType<IMediaFile, MP3MediaFile>();
container.RegisterType<IMediaFile, DefaultMediaFile>(); var op1 = container.Resolve<Operation>();
op1.Do(); //以前的调用方法
//var op2 = new Operation(new 网易云Player(),new MP3MediaFile());
//op2.Do(); Console.ReadKey();
}
}
public class Operation
{
IMediaFile _mtype;
IPlayer _player; public Operation(IPlayer player, IMediaFile mtype)
{
_player = player;
_mtype = mtype;
} public void Do()
{
_player.play(_mtype);
}
}
public interface IPlayer
{
void play(IMediaFile file);
}
public class DefalutPlayer: IPlayer
{
public void play(IMediaFile file)
{
Console.Write("默认:"+file.Name);
}
} public class WYYPlayer : IPlayer
{
public void play(IMediaFile file)
{
Console.Write("网易云:" + file.Name);
}
} public interface IMediaFile
{
string Name { get; set; }
}
public class DefaultMediaFile: IMediaFile
{
public string Name { get; set; } = "默认文件";
} public class MP3MediaFile : IMediaFile
{
public string Name { get; set; } = "MP3文件";
}
后续:UNITY 容器注入什么就拿到什么。想做到插件式开发。还需要定制注入的规则。
说个插件式开发流程:比如有A实现,B实现。我想要真正来做的是B的方法。
1.反射A,B拿到AB的type。
2.在RegisterType的时候根据具体情况注入哪个。比如数组排序,比如type优先级等
Unity IOC简单认知的更多相关文章
- 总结Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下: unityContainer = new Un ...
- MVC中使用Unity Ioc Container
ASP.NET MVC中使用Unity Ioc Container 写在前面 安装Unity 添加服务层 IArticleRepository类型映射 服务注入到控制器 Global.asax初始 ...
- Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下 unityContainer = new Uni ...
- Unity Ioc 依赖倒置及Untity AOP被动拦截/自动拦截
各位博友金安,首先声明这是一篇转载的博客,原文链接:https://www.cnblogs.com/scottpei/archive/2013/01/08/2851087.html 十年河东,十年河西 ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- 1.Spring IoC简单例子
Spring IoC简单例子 1.IHelloMessage.java package com.tony.spring.chapter01; public interface IHelloMessag ...
- .NET Unity IOC框架使用实例
1.IOC简介 IOC(Inversion of Control), 控制反转 DI (Dependency Injection),依赖注入 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在 ...
- 今天研究Unity Ioc 框架
今天研究Unity Ioc 框架,被自己坑了两个多小时. 运行就报错,反反复复检查了很多次,配置文件,代码都没有问题,也从新写了好几遍. 最后仔细看报错消息才知道,config文件没有生成到目录……… ...
- Unity IOC容器的简单应用(转)
转自:http://blog.csdn.net/wanzhuan2010/article/details/7763280 Unity是Unity是微软patterns& practices组用 ...
随机推荐
- Python>>>The Very First Step
Windows官网下载 python-2.7.13.amd64.msi 默认会安装pip,同是把设置环境变量也选中 安装第三方包: pip install pygame 确认已经正确安装的方法:1.完 ...
- C++ 取得系统当前时间
#include <time.h> //* 方法一 time_t tt = time(NULL);//这句返回的只是一个时间cuo tm* t= localtime(&tt); p ...
- asp.net中使用基于角色role的Forms验证
http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...
- redis缓存
参考: java对redis的基本操作 http://www.cnblogs.com/edisonfeng/p/3571870.html 一.支持类型: key:一般设计为标准的字符串, values ...
- 安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具
已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具 错误提示:已安装 SQL Server 2005 E ...
- JSP中动态include和静态include的区别(简版)
动态的include: 用法:<jsp:include page="1.jsp" flush="true" /> 特点:行为元素,可以带参数:先编译 ...
- sql:劳务统计各分公司管理费用明细合计(等同汇总报表)
select gl_balance.year, bd_accsubj.dispname, sum(gl_balance.debitamount) 收入, sum(gl_balance.creditam ...
- Appium的安装
APPium的官网地址为:http://appium.io,在官网可以看到安装步骤如下:
- OAF_文件系列6_实现OAF导出XML文件javax.xml.parsers/transformer(案例)
20150803 Created By BaoXinjian
- viewPager--viewpager时,发生内存溢出OOM问题
两个问题:1.如果图片达到500kb每张,你这个划屏会有顿卡:2.快速滑动有出现0.几秒的白屏.图片越大,顿卡越明显. 回复parcool:500kb的背景算大的了,如果是想做图片墙,viewpage ...