新建一个MVC项目,如 AutoFacTest,引用autofac,如下图:

接下来就是开始进行编程了

首先,新建一个类库,名为 AutoFacTest.Service,该类库编写服务层代码,我们的接口和实现就都放在服务层

新建一个IStudentService.cs 接口,具体代码如下:

namespace AutoFacTest.Service
{
public interface IStudentService
{
int GetStudentAge(string name);
}
}

接着,新建一个实现类 StudentService.cs ,继承IStudentService,如下:

namespace AutoFacTest.Service.impl
{
public class StudentService:IStudentService
{
public int GetStudentAge(string name)
{
int age = ;
switch (name)
{
case "张三":
age = ;break;
case "李四":
age = ;break; }
return age;
}
}
}

定义了一个方法,根据姓名获取年龄。

服务层准备好了,接下来就是开始做注入工作了。

打开Global.cs 文件

    public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
AutoFacRegister(); //注入
} private void AutoFacRegister()
{
var builder = new ContainerBuilder();
//注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
builder.RegisterControllers(typeof(MvcApplication).Assembly);
/*接口实现,构造函数注入,对StudentService与接口进行注入*/
builder.RegisterType<StudentService>().As<IStudentService>(); //设置依赖解析器
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}

至此,完成第一步的注入。此方式为构造函数注入的方式。
接下来就是见证结果的时刻了,我们来看看控制器里面怎么弄。

新建一个控制器 Home,上控制器代码。

 public class HomeController : Controller
{
public IStudentService Stu; //定义全局的学生抽象类对象
/// <summary>
/// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
/// </summary>
/// <param name="stu"></param>
public HomeController(IStudentService stu)
{
this.Stu = stu;
}
// GET: Home
public void Index()
{
Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
}
}

至此,完成处理,接下来,我们就访问 index,看是否能放回张三的年龄。

我们可以发现,返回了张三的年龄。说明我们注入成功了。

总结:

1、采用的是构造函数注入的方式,在构造函数中初始化赋值。

2、Stu对象不需要实例化,即不需要new。降低了系统资源的消耗。

3、需要在global中对StudentService写映射,如果服务类比较多的时候,就需要写很多,如何避免,这个在后面章节讲解。

扩展: 上面讲解了 构造函数注入的方式,下面扩展属性注入的方式。

在global.cs中稍微修改下注入语句即可。

将:

 builder.RegisterControllers(typeof(MvcApplication).Assembly);

改为:

builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
PropertiesAutowired:即,表示允许属性注入。

接下来我们来看怎么使用。
 public class HomeController : Controller
{
public IStudentService Stu { get; set; } //定义全局的学生抽象类对象
/// <summary>
/// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
/// </summary>
// GET: Home
public void Index()
{
Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
}
}

控制器里面写的代码就简单很多了。

注意:Stu必须定义为public类型,否则将映射失败。

												

ASP.NET MVC IOC 之 Autofac(一)的更多相关文章

  1. ASP.NET MVC IOC 之AutoFac

    ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...

  2. [转]ASP.NET MVC IOC 之AutoFac攻略

    本文转自:http://www.cnblogs.com/WeiGe/p/3871451.html 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用A ...

  3. ASP.NET MVC IOC 之AutoFac攻略

    一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofa ...

  4. ASP.NET MVC IOC 之 Autofac 系列开篇

    本系列主要讲述Autofac在.NET MVC项目以及webform中的使用. autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 作为初学者,将学习到的每一步, ...

  5. ASP.NET MVC IOC 之 Autofac(三)-webform中应用

    在webform中应用autofac,只有global中的写法不一样,其他使用方式都一样 nuget上引用: global中的写法: private void AutoFacRegister() { ...

  6. ASP.NET MVC IOC 之 Autofac(二)

    在上一章节,我们已经知道了再控制器中如何注入以及使用了.这一章,我们重点讲解下,如何在服务层中使用. 我们新定义一个教师类,在服务层中,通过这个教师类服务层,获取学生的年龄.实现在教师类的服务层中调用 ...

  7. ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

    上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...

  8. Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac

    经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...

  9. ASP.NET没有魔法——ASP.NET MVC IoC

    之前的文章介绍了MVC如何通过ControllerFactory及ControllerActivator创建Controller,而Controller又是如何通过ControllerBase这个模板 ...

随机推荐

  1. STM32F429的新版用户手册更新记录, 改进、交流(2019-08-18发布V0.9版本)

    2019-06-16 发布首版V0.1 2019-06-23 发布V0.2版本 新增章节: 第3章 STM32F429 整体把控 第4章 STM32F429 工程模板建立(MDK5) 第5章 STM3 ...

  2. 普通的maven项目,如何打成一个fat jar(包括了全部依赖jar包)?

    1.前言 用过spring boot的同学肯定知道,现在web项目可以直接打成jar包运行,相当方便. 那么普通项目如何配置(非spring boot),才能打成一个类似的jar包呢? 2.解决方案: ...

  3. ZooKeeper(六):watch机制的原理与实现

    因为ZK有watch机制,可以随时发现一些数据的变化,从而达到数据的及时性. ZK的所有读操作都可以设置watch监视点: getData, getChildren, exists. 写操作则是不能设 ...

  4. C#面向对象--简介

    一.C#提供对面向对象编程(Object Oriented Programming)的完整支持:类描述对象的类型,而对象是类的具体实例,创建对象的过程也被称为实例化(Instantiation):通常 ...

  5. CAD转DXF怎么转换?教你三种转换方法

    CAD图纸在我们日常生活中都是可见到的,因为CAD图纸文件的格式是多样的,在工作中就需要经常将CAD的格式进行转换.那CAD转DXF怎么转换呢?这个问题很多的小伙伴们都遇到过,下面小编就来教大家三种转 ...

  6. vue之前端鉴权

    vue项目前端鉴权方式常用的有以下三种: 1.渲染菜单时控制模块按钮的显示隐藏(不足:直接输入链接仍然可以访问模块) 2.在路由导航守卫中拦截,针对没有权限的模块进行重定向(不足:每次访问模块都需要鉴 ...

  7. js的委托事件----Vue

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 使用NodeJS模块-第三方提供的模块(什么是npm)

    第三方开发者提供的模块 第三方模块是由NodeJS社区或第三方个人开发的功能模块,这些功能模块以软件包的形式存在.被发布在npmjs注册表中.npmjs是一个注册中心,所有软件包的信息都会被记录到该注 ...

  9. ES6-对象赋值,key值得构建,is()方法对比对象,assign()合并对象

    ES6对象赋值: // es5 let name = "ananiah"; let skill ='web'; let obj = {name:name,skill:skill}; ...

  10. Spring Boot 2 + Thymeleaf:表单字段绑定、表单提交处理

    Spring Boot中Thymeleaf对表单处理的一些用法:(1)使用th:field属性:进行表单字段绑定(2)使用ids对象:一般用于lable配合radio或checkbox使用(3)表单提 ...