控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合。一般而言,控制反转分为依赖注入(Dependency Injection)和依赖查找(Dependency Lookup)。大家用的更多的是依赖注入。

提供控制反转能力的框架通常也称之为IoC容器。在.NET世界中有各种各样的IoC容器,比较著名的就是来源于微软企业库(Enterprise Library)中的Unity,.NET中内置的扩展框架Managed Extensibility Framework(MEF)也可用于IoC,第三方开源的Autofac、Ninject、StructureMap也比较常用。顺带提一下,在ASP.NET 5中已经直接内置了一种依赖注入机制,也可以配置外部的IoC容器。

上面提到的IoC容器功能都很强大,但是有时候我们只需要一个轻量级的简单容器来做一些简单的事情(比如测试的时候使用)。所以,今天要介绍的是由微软员工Hanuk开源到Github上的一个超简单的IoC容器——TypeC。

TypeC除了可以解析接口或抽象基类到具体类外,还为实例类型实现了工厂方法。由于它实现的是单例模式,所以在一个AppDomain中只会存在一个容器实例。要使用非常简单:

//during the startup
TypeContainer typeC = TypeContainer.Instance;
typeC.Register<IList<string>, List<string>>(); //deep inside the layers of the code
var list = typeC.GetInstance<IList<string>>();
list.Add("test");

除了用代码来显式添加映射外,也支持从配置文件中加载映射。如:

//during the startup
string fileName = "TypeConfig.xml";
TypeContainer tc = TypeContainer.Instance;
tc.Reset();
//the Load(fileName) will fail if types can't be resolved
tc.Load(fileName);

具体映射编写方式,可以“阅读原文”来查看。同时也可以访问原文提到的源代码链接,来学习如何开发一个IoC容器。

原文地址:http://blogs.msdn.com/b/hanuk/archive/2015/03/28/typec-a-simple-net-injection-ioc-container.aspx

TypeC一个微软开发的超简单.NET依赖注入/IoC容器的更多相关文章

  1. 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)

    很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...

  2. AngularJS应用开发思维之3:依赖注入

    找不到的API? AngularJS提供了一些功能的封装,但是当你试图通过全局对象angular去 访问这些功能时,却发现与以往遇到的库大不相同. $http 比如,在jQuery中,我们知道它的AP ...

  3. 在.NET Core中处理一个接口多个不同实现的依赖注入问题

    前言 近段时间在准备公司的技术分享,所以这段时间将大部分时间放在准备分享内容上去了.博客也就停了一下下. 在.NET Core中处理依赖注入问题时,往往是定义好了一个操作规范的接口,会有N多个基于不同 ...

  4. PHP 从另一个角度来分析 Laravel 框架的依赖注入功能

    从根本上说,依赖注入不是让对象创建一个依赖关系,也不是让工厂对象去创建对象,而是将所需的依赖变成一个外部对象,使之成为一个"某些人的问题” 你为"某些人的问题”注入了类的依赖关系. ...

  5. C++ 简单实现 依赖注入(IOC)

    由于C++ 不支持“反射机制”, 在C++中需要实现依赖注入或控制反转需要增加辅助程序.例如在Windows 开发程序中根据类名动态创建对象,需要在类定义中增加宏.本文主要介绍C++ Ioc的一种实现 ...

  6. AngularJS开发指南10:AngularJS依赖注入的详解

    依赖注入是一种软件设计模式,用来处理代码的依赖关系. 一般来说有三种方法让函数获得它需要的依赖: 它的依赖是能被创建的,一般用new操作符就行. 能够通过全局变量查找依赖. 依赖能在需要时被导入. 前 ...

  7. 简单解析依赖注入(控制反转)在Spring中的应用

    IoC——Inversion of Control  控制反转DI——Dependency Injection   依赖注入 大家都知道,依赖注入是Spring中非常重要的一种设计模式.可能很多初学者 ...

  8. [ASP.NET Core开发实战]基础篇02 依赖注入

    ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...

  9. 自己实现一个IOC(控制翻转,DI依赖注入)容器

    1.新建一个控制台应用程序 TestIOC 2.新增一个 IocFactory类 using System; using System.Collections.Generic; using Syste ...

随机推荐

  1. 在xib里,拖一个UIView到UITableView中作为tableHeaderView

    原贴地址:http://blog.csdn.net/haoxinqingb/article/details/41683881 内容 在xib里,拖一个UIView到UITableView中作为tabl ...

  2. nginx 服务器重启命令,关闭 (转)

    nginx -s reload  :修改配置后重新加载生效nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...

  3. vssver2.scc 文件是干啥的?

    idcdpi源文件下的tools下有一个文件    vssver2.scc     vssver2.scc是什么文件 首先,先来个名词解释:Microsoft Visual Source Safe是美 ...

  4. c语言的头文件-不是c++类的头文件?

    下面的概述是参考的这篇文章:http://blog.csdn.net/bingxx11/article/details/7771437 c语言编程中也有,也需要头文件, 头文件不只是C++的类才需要! ...

  5. EF图解

  6. =============Python安装与使用================

    用文本编辑器写Python程序,然后保存为后缀为.py的文件,就可以用Python直接运行这个程序了. Python的交互模式和直接运行.py文件有什么区别呢? 直接输入python进入交互模式,相当 ...

  7. c++中的srand()和rand() 转载 自:http://blog.sina.com.cn/s/blog_624c2c4001012f67.html

    今天看了同事写的小程序,发现了其中出现了srand()和rand()这两个我以前没有用过的函数,当然从名字可以看出肯定能随机数有关,于是网查资料知这两个函数配合一起使用来产生随机数的,哈哈,又长知识了 ...

  8. 从零开始写一个武侠冒险游戏-8-用GPU提升性能(3)

    从零开始写一个武侠冒险游戏-8-用GPU提升性能(3) ----解决因绘制雷达图导致的帧速下降问题 作者:FreeBlues 修订记录 2016.06.23 初稿完成. 2016.08.07 增加对 ...

  9. Python 脚本之获取CPU信息

    #!/usr/bin/env Python from __future__ import print_function from collections import OrderedDict impo ...

  10. django-cms 代码研究(二)bugs?

    djangocms集成到现有项目中后,发现了几个问题: 1. 现有项目的url匹配失效,下面requests请求被交给djangocms处理了 url(r'^admin/', include(admi ...