Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个:

优点:

  1. 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用
  2. 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们
  3. XML配置支持
  4. 自动装配 与Asp.Net MVC 集成

通过VS中的NuGet来加载AutoFac,不论是哪种方式,最终的目的就是将 Autofac.dll程序集引用到你的项目中。

demo1结构 

数据访问的接口IDAL

    public interface IDAL
{
string Insert(string commandText);
}

Sql和Oracle两种方式分别实现IDAL接口

public class SqlDAL : IDAL
{
public string Insert(string commandText)
{
return commandText + "-------use sqlserver...";
}
} public class OracalDAL : IDAL
{
public string Insert(string commandText)
{
return commandText+"-------use oracle...";
}
}

然后定义DBManager 构造函数注入

 public class DBManager
{
IDAL _dal;
public DBManager(IDAL dal)
{
_dal = dal;
}
public string Insert(string commandText)
{
return _dal.Insert(commandText);
}
}

最后要真正完成依赖注入依靠AtuoFac

1.  RegisterType<Object>().As<Iobject>()

           # region  builder.RegisterType<Object>().As<Iobject>()
var builder = new ContainerBuilder();
builder.RegisterType<DBManager>();
builder.RegisterType<SqlDAL>().As<IDAL>();
//↑↑↑ builder.RegisterType<Object>().As<Iobject>():注册类型及其实例 注册接口IDAL的实例SqlDAL ↑↑↑
using (var container = builder.Build())
{
var manager = container.Resolve<DBManager>();
//↑↑↑ 解析某个接口的实例。
ViewBag.SqlResult = manager.Insert(" insert into test values('test1','Shanghai') ");
}
#endregion

运行效果:

2.RegisterType<Object>().Named<Iobject>(string name)

           # region   builder.RegisterType<Object>().Named<Iobject>(string name)
var builder = new ContainerBuilder();
builder.RegisterType<SqlDAL>().Named<IDAL>("sql");
builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");
//为一个接口注册不同的实例。有时候难免会碰到多个类映射同一个接口,比如SqlDAL和OracleDAL都实现了IDAL接口,为了准确获取想要的类型,就必须在注册时起名字。
using (var container = builder.Build())
{
//var manager = (SqlDAL)container.ResolveNamed<IDAL>("sql");
var manager = container.ResolveNamed<IDAL>("oracle");
ViewBag.SqlResult = manager.Insert(" insert into test values('test1','Shanghai') ");
}
#endregion

运行效果:

3.builder.RegisterType<Object>().Keyed<Iobject>(Enum enum)

 public enum DBType
{
Sql,
Oracle
}
  # region  builder.RegisterType<Object>().Keyed<Iobject>(Enum enum)
var builder = new ContainerBuilder();
//以枚举的方式为一个接口注册不同的实例。有时候我们会将某一个接口的不同实现用枚举来区分,而不是字符串
builder.RegisterType<SqlDAL>().Keyed<IDAL>(DBType.Sql).InstancePerDependency();
// ↑↑↑ InstancePerDependency() 用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式
builder.RegisterType<OracleDAL>().Keyed<IDAL>(DBType.Oracle).SingleInstance();
// ↑↑↑ SingleInstance() 用于控制对象的生命周期,每次加载实例时都是返回同一个实例
using (var container = builder.Build())
{
var manager = container.ResolveKeyed<IDAL>(DBType.Sql);
// var manager = (OracleDAL)container.ResolveKeyed<IDAL>(DBType.Oracle);
ViewBag.SqlResult = manager.Insert(" insert into test values('test1','Shanghai') ");
}
#endregion

运行效果:

Asp.Net MVC 之 Autofac 初步使用1的更多相关文章

  1. Asp.Net MVC 之 Autofac 初步使用3 集成web api

    今天我们试着在WebApi2实现autofac的注入,关于这方面也是看了几位园友的分享省了不少时间,所以结合着前篇的demo再新建webapi进行... 一样开篇还是发下大概demo结构: 还是nug ...

  2. Asp.Net MVC 之 Autofac 初步使用2 集成mvc 属性注入以及自动注入

    首先看下Demo2的结构     然后下面一步步将Autofac集成到mvc中. 首先,定义Model Product.cs public class Product { public int Id ...

  3. ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下

    ADO.NET   一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data  → DataTable, ...

  4. Asp.Net Mvc使用Autofac实现依赖注入

    在asp.net mvc控制器中使用Autofac来解析依赖 如下Controller中使用构造函数依赖注入接口IPeople : public class AutoFacController : C ...

  5. ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下

    先简单了解一这个几个 名词的意思. 控制反转(IOC) 依赖注入(DI) 并不是某种技术. 而是一种思想.一种面向对象编程法则 什么是控制反转(IOC)?  什么是依赖注入(DI) 可以点击下面链接 ...

  6. Asp.Net MVC 3

    Asp.Net MVC 3   wcf基础教程之 契约(合同)Contract 摘要: 在前几篇博客中我有说到服务的寄宿,就是服务要运行起来必须采取的几种方式,相当于我们可以照葫芦画瓜的效果运行一个w ...

  7. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  8. ASP.NET MVC学前篇之Ninject的初步了解

    ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开 ...

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

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

随机推荐

  1. centos5.5 Apache2 Web 服务器的安装

    # vi /etc/httpd/conf/httpd.conf 把以下虚拟机的配置加在 httpd.conf  文件末尾即可 NameVirtualHost *:80               // ...

  2. Android应用程序组成部分

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  3. shell 命令合并文本

    之前想把代码打印出来看来着,后来合并完之后放在word里发现有2000多页,然后放弃了~anyway,这个命令还是挺有用的. 比如我有文本a001.dat, a002.dat, a003.dat .. ...

  4. C++编程之面向对象的三个基本特征

    面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...

  5. MyEclipse 中 添加 js自动完成模版

    MyEclipse 中 添加 js自动完成模版: window>preference>MyEclipse>Files and Editors>JavaScript>Edi ...

  6. Select与Epoll比较

    一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解 ...

  7. Flex移动应用程序开发的技巧和窍门(四)

    范例文件 flex-mobile-dev-tips-tricks-pt4.zip 这是本系列文章的第四部分,该系列文章涵盖Flex移动开发的秘诀与窍门. 第一部分关注切换视图以及切换执行应用时的数据处 ...

  8. 《你不知道的js》 ------1.作用域是什么

    相关定义 引擎:从头到尾负责整个JavaScript程序的编译及执行过程. 编译器:负责语法分析及代码生成等. 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规 ...

  9. 史上最全的synchronized解释

    首先:推荐使用synchronized(obj)这种方法体的使用方式,一个类里面建议尽量使用单一的同步方法,多种方法混用,维护成本太大. 其次:关于java5.0新增的ReenTrantLock方法: ...

  10. arcpy.mapping-认识arcpy.mapping

    arcpy.mapping-认识arcpy.mapping by 李远祥 ArcMap提供了强大的地图制图功能,在实际的工作中,只要涉及到专题地图和地图册的制作,难免会遇到非常多的出图工作和地图图面元 ...