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. HTML/CSS/JavaScript学习总结(转)

    HTML 网站开发的主要原则是: – 用标签元素HTML描述网页的内容结构: – 用CSS描述网页的排版布局: – 用JavaScript描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的程序 H ...

  3. H-W平衡

    hardy-weinberg平衡:标准定义————如果一个种群符合下列条件:1.种群是极大的:2.种群个体间的交配是随机的,也就是说种群中每一个个体与种群中其他个体的交配机会是相等的:3.没有突变产生 ...

  4. 【BZOJ1552】[Cerc2007]robotic sort Splay

    [BZOJ1552][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N ...

  5. 负载均衡 Lvs nat 模式笔记

    nat技术(网络地址转换) 缺点就是进入和返回都通过调度器的服务器,未来可能会成为瓶颈 实验:nat 模式 先在调度器安装ipvsadm 后再添加网卡,后面就连不上网了(yum -y install ...

  6. Struts2文件的上传

    一.单文件的上传  表单的enctype属性: application/x-www-form-urlencoded:默认的编码方式. multipart/form-data:会以二进制的方式处理表单数 ...

  7. Java jsp 示例

    <!DOCTYPE html> <!-- [ published at 2015-11-13 12:30:50 ] --> <html> <head> ...

  8. FMS带宽的需求计算法

    在开始一个使用 FLASH MEDIA SERVER的项目开始之前,最好能够对你项目使用FLASH MEDIA SERVER 3的带宽需求进行计算.这样对你的项目最终的实现效果,会有一个稳定的结果:去 ...

  9. 从新手到高手c++全方位学习 pdf + 视频教程 共18章

    淘宝已经和谐了这个网站,原网址:https://item.taobao.com/item.htm?spm=a1z09.8149145.0.0.mb00D0&id=17350311256& ...

  10. Javascript中的async await

    async / await是Javascript是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度 ...