Autofac是比较出名的Ioc容器之一,熟悉Orchard的应该熟知。本文直接介绍autofac用法

一、开始

1、NuGet添加或者直接http://code.google.com/p/autofac/wiki/NewInV2

2、资源:

http://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac

http://www.cnblogs.com/wolegequ/tag/autofac/

使用AutoFac需引用AutoFac.dll.如果想使用XML配置,还需要引用Autofac.Configuration.dll.

autofac最常用的解耦方式是从构造器或者属性注入实现ioc

二、用法总括

1 注册服务

RegisterType<T>()//注册类型T

AsImplementedInterfaces()//表示注册的类型,以接口的方式注册

Build()//创建一个容器

var builder=new ContainerBuilder();
(1)builder.RegisterType<ConsoleLogger>().As<ILogger>();
(2) builder.RegisterType<A>();
(3) builder.RegisterType(typeof(A));
(4) builder.Register(c=>new A(c.Resoler<B>()));
(4.1)builder.Register(c => new UserSession(DateTime.Now.AddMinutes(25))); //带复杂参数的构造(构造函数的参数不能使用简单的常量定义)
(5)builder.Registe(c=>new A(){MyB=c.ResolverOptional<B>()}); //属性注入
(6)根据参数来选择实现的对象

  builder.Register<CreditCard>((c, p) => {

var accountId = p.Named<string>("accountId");
if (accountId.StartsWith("9"))
return new GoldCard(accountId);
else
return new StandardCard(accountId);

(7) 对已存在的单例进行注入 builder.RegisterInstance(MySingleton.Instance).ExternallyOwned();
(8) builder.RegisterGeneric(typeof(NHibernateRepository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
(9) builder.Register<X2>().As<IX>().PreserveExistingDefaults();
//使用已存在的注册
(10)builder.RegisterModule(new ConfigurationSettingsReader("autofac"));配置文件注册

2、ContainnerBuilder创建实例

1)、InstancePerDependency

对每一个依赖或每一次调用创建一个新的唯一的实例。这也是默认的创建实例的方式。

2、InstancePerLifetimeScope

在一个生命周期域中,每一个依赖或调用创建一个单一的共享的实例,且每一个不同的生命周期域,实例是唯一的,不共享的。

3、InstancePerMatchingLifetimeScope

在一个做标识的生命周期域中,每一个依赖或调用创建一个单一的共享的实例。打了标识了的生命周期域中的子标识域中可以共享父级域中的实例。若在整个继承层次中没有找到打标识的生命周期域,则会抛出异常:DependencyResolutionException

4、InstancePerOwned

在一个生命周期域中所拥有的实例创建的生命周期中,每一个依赖组件或调用Resolve()方法创建一个单一的共享的实例,并且子生命周期域共享父生命周期域中的实例。若在继承层级中没有发现合适的拥有子实例的生命周期域,则抛出异常:DependencyResolutionException

5、SingleInstance

每一次依赖组件或调用Resolve()方法都会得到一个相同的共享的实例。其实就是单例模式。

6、InstancePerHttpRequest

在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发。官方文档解释:Share one instance of the component within the context of a single HTTP request.

IOC容器 - Autofac概述的更多相关文章

  1. IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用

    Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...

  2. Ioc容器Autofac系列(1)-- 初窥

     一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...

  3. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  4. .net core2.0下Ioc容器Autofac使用

    .net core发布有一段时间了,最近两个月开始使用.net core2.0开发项目,大大小小遇到了一些问题.准备写个系列介绍一下是如何解决这些问题以及对应技术.先从IOC容器Autofac开始该系 ...

  5. IoC容器Autofac学习笔记

    一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...

  6. [转]Ioc容器Autofac

    本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥   前言 第一次接触A ...

  7. 用Rider写一个有IOC容器Autofac的.net core的程序

    一:Autofac是一个和Java里的Spring IOC容器一样的东西,不过它确实没有Spring里的那么方便,主要是在于它没有提供足够的Api和扫描方式等等,不过优点是它比Spring要快很多,而 ...

  8. ASP.NET中IOC容器Autofac(依赖注入DI 控制反转IOC)

    IOC的一个重点是在程序运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI来实现的.Autofac则是比较流行的一款IOC容器. IoC和DI有什么关系呢?其实它们是同一个概念的不同角度 ...

  9. IoC容器Autofac之IOC/DI基本概念(二)

    原文:http://www.cnblogs.com/xdp-gacl/p/4249939.html 1.1.IoC是什么 Ioc—Inversion of Control,即“控制反转”,一种设计思想 ...

随机推荐

  1. Yii框架tips(转)

    yii的一些小的技巧 http://www.yiichina.com/topic/151 db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何 ...

  2. linux内核--几个上下文(context)

    为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为叫进程切换(process switch),任务切换(task switch)或上下文切换(con ...

  3. Maven配置 settings.xml 转

    https://my.oschina.net/qjx1208/blog/201085 摘要: 记录settings.xml的配置,理解mirror.repository.profile的关系 本地仓库 ...

  4. Win7 下安装RabbitMQ

    RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; 下载RabbitMQ,下载地址: rabbitmq-server-3.5.6.exe和erlang,下载地址:o ...

  5. W5500问题集锦(持续更新中)

    在"WIZnet杯"以太网技术竞赛中,有非常多參赛者在使用中对W5500有各种各样的疑问,对于这款WIZnet新推出的以太网芯片,使用中大家是不是也一样存在下面问题呢?来看一看: ...

  6. mybatis02 架构

    SqlMapConfig.xml(mybatis全局配置文件加载mybatis环境(数据源,事物,mapper.xml(配置sql语句),),类似于hibernate的全局配置文件,用于加载hiber ...

  7. IOPS QPS TPS

    杨奇龙: http://blog.itpub.net/22664653/viewspace-767265/ http://blog.itpub.net/22664653/viewspace-76726 ...

  8. pcap的pcap_dump()保存的文件格式

    (2009-09-01 20:36:49) 转载▼ 标签: 杂谈 分类: 专业 首先是tcpdump文件格式 当你在Windows或者Linux环境下用tcpdump命令抓取数据包时,你将得到如下格式 ...

  9. QT实现多语言切换

    功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...

  10. Load resources from classpath in Java--reference

    In general classpath is the path where JVM can find .class files and resources of your application a ...