Autofac

IoC依赖注入容器
授权协议 MIT
开发语言 C# .NET
所属分类 程序开发、 面向方面AOP/IoC
软件类型 开源软件
地区 不详
投 递 者 锺离自明
操作系统 Windows
开源组织
适用人群 未知
 软件概览

Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成。

Autofac的主要特性如下:

  1. 灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还 可以基于lambda表达式创建实例,这使得容器非常灵活,很容易和其他的组件集成。 var defaultLog = new ConsoleLog();  builder.Register(c => new Connection(){ Log = c.ResolveOptional<ILog>() ?? defaultLog });大家知道lambda表达式并不是 在声明的时候的执行的,只有等到容器的Resolve()方法调用的时候,表达式才执行。表达式还有一个好处是不需要使用反射或者是使用XML语法来表 达。
  2. 资源管理的可视性:基于依赖注入容器构建的应用程序的动态性,意味着什么时候应该处理那些资源有点困难。Autofac通过跟踪特 定作用域内的实例和依赖来解决这个问题(DeterministicDisposal)。IDisposable接口接口是把双刃剑,既是一个老孙手上 的金箍棒,也是老孙头上的魔咒,有一种明确的方式告诉那一部分应该被清理,但是一个组件要何时处理并不是很容易确定的事情,比如说一个服务可以有多个实现 的时候就变得很糟糕,组件的创建上(GOF的创建型设计模式)有的是通过工厂方式创建的,有的是单件方式创建的,有些需要被清理,有些却不需要清理。组件 的使用者无法知道是否把转换为IDisposable接口调用它的Disposal方法。Autofac通过容器来跟踪组件的资源管理。对于不需要清理的 对象,例如Console.Out,我们调用ExternallyOwned()方法告诉容器不用清理。细粒度的组件生命周期管理:应用程序中通常可以存 在一个应用程序范围的容器实例,在应用程序中还存在大量的一个请求的范围的对象,例如一个HTTP请求,一个IIS工作者线程或者用户的会话结束时结束。 通过嵌套的容器实例和对象的作用域使得资源的可视化。
  3. Autofac的设计上非常务实,这方面更多是为我们这些容器的使用者考虑:
  • 组件侵入性为零:组件不需要去引用Autofac。
  • 灵活的模块化系统:通过模块化组织你的程序,应用程序不用纠缠于复 杂的XML配置系统或者是配置参数。
  • 自动装配:可以是用lambda表达式注册你的组件,autofac会根据需要选择构造函数或者属 性注入
  • XML配置文件的支持:XML配置文件过度使用时很丑陋,但是在发布的时候通常非常有用
  • 组件的多服务支持:许 多设计师喜欢使用细粒度的接口来控制依赖 , autofac允许一个组件提供多个服务。
  • Autofac 是 .NET 下的一个开源 Ioc 容器的实现库,虽然实际上系统自带有一个 Microsoft.Extensions.DependencyInjection,已经提供了基础的依赖注入的能力。但是我发现很多人喜欢用 Autofac,因为这个 Ioc 容器提供的功能更多更加强大。 首先简单介绍一下控制反转,依赖注入,虽然这个应该网上有很多文章都有讲过,但还是介绍一下自己的看法(不保证是

  • using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace FB.CMS.MvcSite.App_Start { using Autofac; using Autofac.Integration.Mvc; using System.Refle

  • 目录 一:基本使用 二:简单理解Autofac容器 三:多种注册方式 四:构造函数注入 一:默认构造函数注入 二:选择一个构造函数参数的构造函数 五:属性注入 一:属性注入 二:属性注入扩展--指定属性注入 六:方法注入 七:单个对象多个实现 一:单个对象获取全部实现 二:单个对象获取单个实现 八:ASP.NET Core MVC 项目整合 Autofac 九:控制器属性注入 一:控制器属性注入

 相关资料
  • 容器和依赖注入 5.1版本正式引入了容器的概念,用来更方便的管理类依赖及运行依赖注入。 5.0版本已经支持依赖注入的,依赖注入和容器没有必然关系 容器类的工作由think\Container类完成,但大多数情况我们只需要通过app助手函数即可完成大部分操作。 依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于

  • 依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象。 Martin 的文章 已经解释了 DI 容器为什么很有用。 这里我们主要讲解 Yii 提供的 DI 容器的使用方法。 依赖注入(Dependency Injection) Yii 通过 yii\di\Container 类提供 DI 容器特性。 它支持如下几种类型的依赖注入:

  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 问题内容: 我的理解: 依赖关系是当ClassA实例需要ClassB实例实例化ClassA的新实例时。 依赖项注入是通过ClassA的构造函数中的参数或通过set〜DependencyNameHere〜(〜DependencyNameHere〜$ param)函数将ClassA传递给ClassB的实例时进行的。 (这是我不确定的领域之一) 。 IoC容器是单例类(在任何给定时间只能实例化1个实例)

  • 主要内容:什么是依赖注入,value,factory,provider,constant,实例,AngularJS 实例 - factory,AngularJS 实例 - provider什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦