ASP.NET MVC IOC 之 Autofac(一)
新建一个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(一)的更多相关文章
- ASP.NET MVC IOC 之AutoFac
ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...
- [转]ASP.NET MVC IOC 之AutoFac攻略
本文转自:http://www.cnblogs.com/WeiGe/p/3871451.html 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用A ...
- ASP.NET MVC IOC 之AutoFac攻略
一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofa ...
- ASP.NET MVC IOC 之 Autofac 系列开篇
本系列主要讲述Autofac在.NET MVC项目以及webform中的使用. autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 作为初学者,将学习到的每一步, ...
- ASP.NET MVC IOC 之 Autofac(三)-webform中应用
在webform中应用autofac,只有global中的写法不一样,其他使用方式都一样 nuget上引用: global中的写法: private void AutoFacRegister() { ...
- ASP.NET MVC IOC 之 Autofac(二)
在上一章节,我们已经知道了再控制器中如何注入以及使用了.这一章,我们重点讲解下,如何在服务层中使用. 我们新定义一个教师类,在服务层中,通过这个教师类服务层,获取学生的年龄.实现在教师类的服务层中调用 ...
- ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用
上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...
- Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac
经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...
- ASP.NET没有魔法——ASP.NET MVC IoC
之前的文章介绍了MVC如何通过ControllerFactory及ControllerActivator创建Controller,而Controller又是如何通过ControllerBase这个模板 ...
随机推荐
- IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1
HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证.并不是所有的主浏览器都支持新的input类型,不过我们可以在所有的主浏览器中使用它们,即使不被支持,仍然可以显示为常规的文本域 ...
- 对numpy.meshgrid()理解
一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...
- 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...
- Java 网络编程初探
Java 网络编程 网络编程 网络编程:进行服务器端与客户端编程的开发操作实现. java.net:网络操作包 B/S结构: 浏览器/服务器模式(Browser/Server) 不在开发客户端代码 开 ...
- CamlQuery对SharePointOnline List 发起查询请求
最近的项目中遇到了一个需求,需要向SharePointList 查询Item是否存在,找到了CamlQuery这样一个方法,但是没有找到使用这个接口的频率限制说明文档,于是就有了这篇随笔. 新接触这个 ...
- OpenCV:增加和减少图像的亮度,图像的加减法
首先导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(imag ...
- php 7.1.32 +Apache 2.4 配置 (x64)
最近phpstudy 后门事件一出,吓得小编瑟瑟发抖,决心自己配置环境不再用集成环境. 一.apache 配置 首先我们先去apache 官网下载apache apache2.4地址:https:// ...
- mysql忧化参数
转自 https://blog.51cto.com/tongcheng/1710265以下参数是在mysql-5.6.27中使用,可能mysql版本不同使用方法不一样1.线程参数innodb_read ...
- centos python3 的 卸载 删除
卸载/删除python 3.4看到网上说慎用 apt-get remove和 yum remove ,因此不敢用此类命令用卸载了(以后阿里云服务器快过期不用了的时候可以试一下,看看系统是否会崩,哈哈) ...
- React中条件渲染
17==> 条件渲染 state初始化一般写在构造器当中 CharShop.js如下 import React, { Component } from "react"; ex ...