Autofac

Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高。

官方网站http://autofac.org/

源码下载地址https://github.com/autofac/Autofac

  • 控制反转(IoC/Inverse Of Control):   调用者不再创建被调用者的实例,由autofac框架实现(容器创建)所以称为控制反转。
  • 依赖注入(DI/Dependence injection) :   容器创建好实例后再注入调用者称为依赖注入。

安装Autofac

Install-Package Autofac

注入方法一:

var builder = new ContainerBuilder();

builder.RegisterType<TestService>();
builder.RegisterType<TestDao>().As<ITestDao>();

return builder.Build();

注入方法二:

为了统一管理 IoC 相关的代码,并避免在底层类库中到处引用 Autofac 这个第三方组件,定义了一个专门用于管理需要依赖注入的接口与实现类的空接口 IDependency:

  /// <summary>
  /// 依赖注入接口,表示该接口的实现类将自动注册到IoC容器中
  /// </summary>
  public interface IDependency
  { }

  

这个接口没有任何方法,不会对系统的业务逻辑造成污染,所有需要进行依赖注入的接口,都要继承这个空接口,例如:

业务单元操作接口:

/// <summary>
/// 业务单元操作接口
/// </summary>
public interface IUnitOfWork : IDependency
{
    ...
}

  Autofac 是支持批量子类注册的,有了 IDependency 这个基接口,我们只需要 Global 中很简单的几行代码,就可以完成整个系统的依赖注入匹配:

ContainerBuilder builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>));
Type baseType = typeof(IDependency);

// 获取所有相关类库的程序集
Assembly[] assemblies = ...

builder.RegisterAssemblyTypes(assemblies)
    .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
    .AsImplementedInterfaces().InstancePerLifetimeScope();//InstancePerLifetimeScope 保证对象生命周期基于请求
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

  如此,只有站点主类库需要引用 Autofac,而不是到处都存在着注入的相关代码,大大降低了系统的复杂度。

1、InstancePerDependency

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

2、InstancePerLifetimeScope

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

3、InstancePerMatchingLifetimeScope

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

4、InstancePerOwned

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

5、SingleInstance

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

6、InstancePerHttpRequest

在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发。

参考链接:

autofac 创建实例方法总结:http://www.cnblogs.com/manglu/p/4115128.html

AutoFac使用方法总结:Part I:http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/

时间: 2024-11-05 12:18:43

Autofac的相关文章

AutoFac Asp.Net Mvc

autofac依赖注入,帮我们实例化接口,无需使用传统的New 如: public class AutoFacController : Controller { public IPeople _people; public AutoFacController(IPeople people) { _people = people; } // GET: AutoFac public ActionResult Index() { ViewBag.test = _people.Getpeople();

[转]依赖注入框架Autofac的简单使用

Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的.于是,今天抽空研究了下它.下载地址:http://code.google.com/p/autofac/downloads/list 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,这也是本篇文章重点使用的Autofac的类库. 2)创建一个控制台工程,并且引用以上的DLL文件.创建一个数据库操作接

【翻译Autofac的帮助文档】1.入门指南

[写在前面]尝试做完一件工作之外自我觉得有意义的一件事,那就从翻译Autofac的帮助文档吧. 入门指南 将Autofac集成你的应用程序的步骤通常很简单,一般是: 时刻以IOC(控制反转)的思想来规划你的应用程序 在你的Porject中添加Autofac引用 按照如下步骤设计应用程序的启动环节 创建一个ContainerBuilder 向ContainerBuilder注册组件 通过ContainerBuilder的Build()方法获得Container(后续需用到) 在应用程序运行环节时,

用Autofac实现MVC5的IoC控制反转方法

Autofac跟Ninject一样,都是用于IOC,实现依赖注入的.主要有两个步骤,其余跟Ninject差不多. 1.主要的操作是在MVC项目下的Infrastructure(基础结构/公共建设)文件夹下,新建一人注册Autofac的IOC的类 namespace BookShop.WebUI.Infrastructure { public class AutofacReg { public static void RegisterDenpendencies() { var build = ne

问题:IIS部署 MVC项目 (autofac) 错误解决

http://www.cnblogs.com/yelaiju/p/3375168.html Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题 在部署到iis的时候会出现这个状况. 解决:下载安装这个补丁 http://support.microsoft.com/kb/2468871 http://www.microsoft.com/zh-cn/download/confirmation.aspx

NET Core 整合Autofac和Castle

NET Core 整合Autofac和Castle 阅读目录 前言: 1.ASP.NET Core中的Autofac 2.整合Castle的DynamicProxy 3.注意事项 回到目录 前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 回到目录 1.ASP.NET Core中的Autofac 首先在Project.json的Dependency节点为中添

autofac v4.0+通过配置文件的方式注册组件

最近在看李玉宝 / OpenAuth.Net的项目代码,新手表示看不懂.所以,不管三七二十一,模仿是最好的学习,于是我决定自己创建一个项目,把人家的代码一点一点拷贝过来,细细品味. 在研究的过程中,我发现大神用autofac是通过配置文件的方式.Autofac.Configuration的版本是V3.3,然后我创建的项目用的是V4.0.1. 本来是想用代码注册组件的,但是以看到大神是通过配置文件注册的,于是乎,不管三七二十一,我就定下了一个小目标,我要用v4.0.1版本来完成使用配置文件的方式来

Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合起来,实现 AOP 功能. 首先,我们需要定义拦截器,简单的定义可实现 Castle.DynamicProxy.IInterceptor 接口即可. 添加拦截器   定义好了拦截器后,如何应用到相关对象呢?有两种方式: 1)使用 Autofac.Extras.DynamicProxy2.InterceptAttr

浅析依赖注入框架Autofac的使用

Autofac是一款IOC框架,比起Spring.NET,Unity,Castle等等框架,它很轻量级且性能也很高,下面小编给大家介绍下依赖注入框架Autofac的使用. 下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示:  Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的. 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,

IoC容器Autofac正篇之依赖注入(六)

依赖注入,这个专业词我们可以分为两个部分来理解: 依赖,也就是UML中描述事物之间关系的依赖关系,依赖关系描述了事物A在某些情况下会使用到事物B,事物B的变化会影响到事物A: 注入,医生通过针头将药物注入到病人体内.注入也就是由外向内注入.灌输一些东西. 综合上面的说明,依赖注入就是A类依赖B类,B类的实例由外部向A注入而不是由A自己进行实例化或初始化. 三种注入方式 一.构造器注入   类A依赖于类B,类A的构造方法中,有一个参数为类B,在new 类A时会从外部为类B传入实例就是构造注入 cl