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框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...
随机推荐
- UI2_UITableViewDelete
// AppDelegate.m // UI2_UITableViewDelete // // Created by zhangxueming on 15/7/14. // Copyright (c) ...
- 多文件上传artDialog+plupload
一.效果展示 包括文件上传面板以及文件上传列表 二.介绍 长话短说,采用spring springMVC mybatis maven mysql,实现多文件上传功能,下载使用的是流的形式. 其中涉及的 ...
- input中的id和name
name在以下用途是不可替代的: 1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文 ...
- 进程通信---FIFO
管道没有名字,所以只能在具有血缘关系的进程间使用,而在无名管道发展出来的有名管道FIFO,则有路径名与之相关联,以一种特殊设备文件形式存在于文件系统中,从而允许无亲缘关系的进程访问FIFO,下面看FI ...
- 2016.10.30 济南学习 Day2 下午 T1
他 [问题描述] 一张长度为N的纸带,我们可以从左至右编号为0 − N(纸带最左端标号为 0).现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行 ...
- POD数据了解
Plain old data (普通旧的数据); POD 是Plain Old Data的簡寫,是指一些系統的int, char, float.指標.array之類的資料型別,這應該蠻好想像的,就是C ...
- 分布式MySQL 数据库
http://zhangxugg-163-com.iteye.com/blog/1666673 而本文所描述的 federated属于 MySQL的一种特殊引擎,利用它可将本地数据表映射至远程 MyS ...
- 四位数码管SH5461AS的问题,arduino学习实测.
arduino入门教程到第16课遇到些问题.效果一直是混乱的状态. 琢磨了半天发现一些问题,和大家分享下 1)接线图,原图没有问题,只是比较含糊,线比较多不好看. 我用红色数字标示数码管的12个脚,并 ...
- WP开发笔记——阻止Back后退键
WP7中如何阻止Back后退键的后退事件呢? WP7上提供了物理的Back按键,获取Back物理键按下可以通过PhoneApplicationPage的BackKeyPress事件. 具体实现方法如下 ...
- JVM调优总结 -Xms -Xmx -Xmn -Xss(转载)
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...