Ioc 比较
public interface IC {
}
public class A
{
IC ic_;
public A(IC ic) { ic_ = ic; }
}
public class B : IC {
}
[Export]
public class A_MEF
{
[Import]
public IC ic_{get;set;}
}
[Export(typeof(IC))]
public class B_MEF : IC
{
}
class Program
{
/// <summary>
/// install-package Ninject
/// install-package autofac
/// install-package Munq.IocContainer
/// install-package Unity
/// Install-Package Microsoft.Composition
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{ Cost("Ninject", () =>
{
IKernel kernel = new StandardKernel();
kernel.Bind<IC>().To<B>();
IC ic = kernel.Get<IC>();
A AFromNinject = new A(ic);
}); Cost("Autofac", () =>
{
var builder = new ContainerBuilder();
builder.RegisterType<B>().As<IC>();
builder.RegisterType<A>();
var container = builder.Build();
var AFromAutofac = container.Resolve<A>();
}); Cost("Munq", () =>
{
var ioc_container = new IocContainer();
ioc_container.Register<IC, B>();
var AFromMunq = ioc_container.Resolve<A>();
}); Cost("Unity", () =>
{
var containerUnity = new UnityContainer();
containerUnity.RegisterType<IC, B>();
var AFromUnity = containerUnity.Resolve<A>();
}); Cost("MEF", () =>
{
var assemblyCatalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
CompositionContainer container = new CompositionContainer(assemblyCatalog);
var AMEF = container.GetExports<A_MEF>();
});
}
static void Cost(string ioc,Action action)
{ var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i=0;i<1000;i++)
{
action();
}
stopwatch.Stop();
var ticks = stopwatch.ElapsedMilliseconds;
Console.WriteLine(ioc + ": " + (ticks / 1000.00).ToString()+" s");
}
}

static void Cost(string ioc,Action action)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i=0;i<1000;i++)
{
Task.Run(action); // 换成多线程
}
stopwatch.Stop();
var ticks = stopwatch.ElapsedMilliseconds;
Console.WriteLine(ioc + ": " + (ticks / 1000.00).ToString()+" s");
}

Ioc 比较的更多相关文章
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- 深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- 自己实现简单Spring Ioc
IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
- DIP原则、IoC以及DI
一.DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象. 抽象不应该依赖于细节,细节应该依赖于抽象. 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为:"依赖于抽象&qu ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
- 【初探Spring】------Spring IOC(二):初始化过程---简介
首先我们先来看看如下一段代码 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultList ...
- 【初探Spring】------Spring IOC(一)
IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...
- .NET里简易实现IoC
.NET里简易实现IoC 前言 在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...
随机推荐
- ASP.NET MVC强制返回XML
GlobalConfiguration.Configuration.Formatters.Remove(config.Formatters.JsonFormatter);
- 1_1准备工作[wp8特色开发与编程技巧]
1准备工作 大家好,我是徐文康,今天我要开始带大家玩转windowsphone8 app的开发 在这一套视频中,我将带大家从零开始学习编程.在互联网时代熟悉编程是非常有必要的.差异化竞争将变成趋势,那 ...
- JQuery之proxy实现绑定代理
在javascript中,this指代的对象时常会变化,这会造成程序,混乱,一般做法就是先将this保存在一个变量中,就不怕她变了,我们先看一个小例子 var A = function(){ this ...
- ADO.NET基本操作(CRUD、Procedure、Transaction)
模型沿用上篇博客所提到的学生.教师.课程,以详细的代码进行演示. 增删改查 添加学生.教师.课程 using System.Data.SqlClient; namespace Test { class ...
- Berkeley DB分布式探索
明天回家就没有网络,今晚就将整个编写过程记录下来.顺带整理思路以解决未能解决的问题. 标题有点托大,想将Berkeley DB做成分布式存储,感觉很高端的样子,实际上就是通过ssh将Berkeley ...
- Delphi XE5教程7:单元引用和uses 子句
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- Messages.pas里的消息
一.Windows 消息大全 这张表拷贝自万一兄的帖子:http://www.cnblogs.com/del/archive/2008/02/25/1079970.html 但是我希望自己能把这些消息 ...
- easyui菜单栏的使用
<div id="tabs" class="easyui-tabs" data-options="plain:true,fit:true,bor ...
- 第29章 项目10:DIY街机游戏
1.问题 "Self-Defense Against Fresh Fruit":军士长指挥自己的士兵使用自我防御战术对抗以石榴.芒果.青梅和香蕉等新鲜水果入侵者.防御战术包括使用枪 ...
- 1093. Count PAT's (25)
The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...