IoC之AutoFac(四)——AutoFac在MVC中的使用
阅读目录
Mvc中使用Autofac
前面学习了AutoFac的注册、解析、生命周期,这里写一个AutoFac在ASP.NET MVC中的简单使用。
基本结构:AutoFacMvc作为ui层 ,IService类库(各种服务接口),Service类库(IService中接口的实现),Model类库(数据模型,这里使用EF)
我们的目的:实现MVC中的Controller和Service中的具体实现类解耦

获取用户列表的简单例子:
IService中的接口:

namespace IService
{
public interface IUserInfoService
{
List<UserInfo> GetUsers();
}
}

Service中的实现:

namespace Service
{
public class UserInfoService : IUserInfoService
{
//获取用户列表
public List<Model.UserInfo> GetUsers()
{
DbContext context = DbFactory.GetDbContext();
return context.Set<UserInfo>().ToList<UserInfo>();
}
}
}

第一步:在mvc中添加dll文件,可以通过Nuget直接添加

第二步:在App_Start文件夹中添加一个AutofacConfig类

1 public class AutofacConfig
2 {
3 /// <summary>
4 /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
5 /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作
6 /// </summary>
7 public static void Register()
8 {
9 //实例化一个autofac的创建容器
10 var builder = new ContainerBuilder();
11 //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (AutoFacMvcDemo)
12 Assembly controllerAss = Assembly.Load("AutoFacMvcDemo");
13 builder.RegisterControllers(controllerAss);
14
15 //如果有Dal层的话,注册Dal层的组件
16 //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例
17 //Assembly dalAss = Assembly.Load("Dal");
18 //创建respAss中的所有类的instance以此类的实现接口存储
19 //builder.RegisterTypes(dalAss.GetTypes()).AsImplementedInterfaces();
20
21 //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例
22 Assembly serviceAss = Assembly.Load("Service");
23 //创建serAss中的所有类的instance以此类的实现接口存储
24 builder.RegisterTypes(serviceAss.GetTypes()).AsImplementedInterfaces();
25
26
27 //创建一个Autofac的容器
28 var container = builder.Build();
29 //将MVC的控制器对象实例 交由autofac来创建
30 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
31 }
32 }

第三步:在Global.asax调用AutofacConfig类中的Register方法,注册组件

1 public class MvcApplication : System.Web.HttpApplication
2 {
3 protected void Application_Start()
4 {
5 AreaRegistration.RegisterAllAreas();
6 RouteConfig.RegisterRoutes(RouteTable.Routes);
7 //注册组件
8 AutofacConfig.Register();
9 }
10 }

第四步:简单测试
UserInfoController :

1 namespace AutoFacMvcDemo.Controllers
2 {
3 public class UserInfoController : Controller
4 {
5 private IUserInfoService userinfoService;
6 //通过构造器注入依赖
7 public UserInfoController(IUserInfoService _userinfoService)
8 {
9 userinfoService = _userinfoService;
10 }
11
12 public ActionResult Index()
13 {
14 //不使用autofac时,service层和mvc ui层强耦合
15 //UserInfoService userInfoService = new UserInfoService();
16 //List<UserInfo> users= userInfoService.GetUsers();
17
18 List<UserInfo> users= userinfoService.GetUsers();
19 ViewBag.users = users;
20 return View();
21 }
22 }
23 }

View

@{
ViewBag.Title = "Index";
}
<h2>用户列表</h2>
@* 简单展示用户 *@
<table>
@foreach (var item in ViewBag.users)
{
<tr>
<td>@item.UId</td>
<td>@item.UserName</td>
<td>@item.Age</td>
</tr>
}
</table>

运行结果:

补充:可以逐个进行注册代码如下,在Application_Start方法中添加如下代码 :

//创建autofac管理注册类的容器实例
var builder = new ContainerBuilder();
//注册组件(注意:在注册时添加了UserInfoService的引用,其实还是耦合的,在不分层的项目中好用)
builder.RegisterType<UserInfoService>().As<IUserInfoService>();
//使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
builder.RegisterControllers(Assembly.GetExecutingAssembly());
//生成具体的实例
var container = builder.Build();
//下面就是使用MVC的扩展 更改了MVC中的注入方式.
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

IoC之AutoFac(四)——AutoFac在MVC中的使用的更多相关文章
- 第四节:MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法
一. 简介 MVC中的过滤器可以说是MVC框架中的一种灵魂所在,它是MVC框架中AOP思想的具体体现,所以它以面向切面的形式无侵入式的作用于代码的业务逻辑,与业务逻辑代码分离,一经推出,广受开发者的喜 ...
- YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...
- 玩转spring mvc(四)---在spring MVC中整合JPA
关于在Spring MVC中整合JPA是在我的上一篇关于spring mvc基本配置基础上进行的,所以大家先参考一下我的上一篇文章:http://blog.csdn.net/u012116457/ar ...
- IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用
Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...
- ASP.NET MVC IOC依赖注入之Autofac系列(一)- MVC当中应用
话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...
- 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, ...
- IOC容器-Autofac在MVC中实现json方式注入使用
在你阅读时,默认已经了解IOC和autofac的基本用法, 我在最近的我的博客项目中运用了IOC autofac 实现了依赖注入 由于我的项目时asp.net MVC所以我目前向大家展示MVC中如何使 ...
- Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac
经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...
- ASP.NET MVC中简单使用Autofac
项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control.控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度. 示例代码: IPro ...
随机推荐
- dp经典问题-最大连续子序列和 hdu1003
题目描述: 这道题我先后做过三遍,结果每一遍都没有做出来.今天再仔仔细细的研究了一下,才发现用动态规划更好理解. 关于求最大连续子序列和的博文转载如下:https://www.cnblogs.com/ ...
- JAVAScript:前端模块化开发
目录 一:前端模块化概要 1.1.模块化概要 1.2.函数封装 1.3.对象封装 1.4.立即执行函数表达式(IIFE) 1.5.模块化规范 1.5.1.CommonJS 1.5.2.AMD((Asy ...
- python 元类的简单解释
本文转自博客:http://www.cnblogs.com/piperck/p/5840443.html 作者:piperck python 类和元类(metaclass)的理解和简单运用 (一) p ...
- BZOJ.3293.[CQOI2011]分金币(思路)
3293 双倍经验 1045 先考虑能否断环为链.显然是可以的,因为金币不可能在整个环上平移.所以我们枚举断点\(k\),表示\(k\)和\(k+1\)之间不交换金币. 令\(d_i=a_i-aver ...
- 潭州课堂25班:Ph201805201 django 项目 第二十九课 docker实例,文件下载前后台实现 (课堂笔记)
docker 实例 :wq!保存退出 放入一个 html 文件 权限不够,加 sudo 查看本地仓库的 image 运行 docker -- name,后跟个运行名, -p 物理机端口映射到容器端口, ...
- leetCode中老出现的针对一个int中每个数字的处理
一个int比如322,我想找happy number就得3平方加2平方再加2平方,怎样找到一个一个的数字,就是322%10,得到2,然后/10,然后再%,就可以依次求得每位上的数字 happy num ...
- MySQL(七)
视图 对于复杂的查询,在多次使用后,维护是一件非常麻烦的事情 解决:定义视图 视图本质就是对查询的一个封装 定义视图 create view stuscore as select students.* ...
- Java 反射 调用私有构造方法
单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...
- AES 加密问题
C# 里面封装的Aes算法好像跟网上C++的加密算法差很多.在网上找了很多资料才看到一个很早的文章, 用C#实现网上C++的算法. http://msdn.microsoft.com/zh-cn/ma ...
- 一个ner的bug
整个机器人代码之前都是好好的,今天启动的时候,就报Initialization failed! 的错误,然后想着其他模块应该没有问题.然后单独运行或者叫测试吧,测试了下 search_eng.py,发 ...