阅读目录


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中的使用的更多相关文章

  1. 第四节:MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法

    一. 简介 MVC中的过滤器可以说是MVC框架中的一种灵魂所在,它是MVC框架中AOP思想的具体体现,所以它以面向切面的形式无侵入式的作用于代码的业务逻辑,与业务逻辑代码分离,一经推出,广受开发者的喜 ...

  2. YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由

    上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...

  3. 玩转spring mvc(四)---在spring MVC中整合JPA

    关于在Spring MVC中整合JPA是在我的上一篇关于spring mvc基本配置基础上进行的,所以大家先参考一下我的上一篇文章:http://blog.csdn.net/u012116457/ar ...

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

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

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

    话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...

  6. 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, ...

  7. IOC容器-Autofac在MVC中实现json方式注入使用

    在你阅读时,默认已经了解IOC和autofac的基本用法, 我在最近的我的博客项目中运用了IOC autofac 实现了依赖注入 由于我的项目时asp.net MVC所以我目前向大家展示MVC中如何使 ...

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

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

  9. ASP.NET MVC中简单使用Autofac

    项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control.控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度. 示例代码: IPro ...

随机推荐

  1. Dev-C++安装第三方库boost

    Dev-C++安装第三方库boost  转 https://www.jianshu.com/p/111571e4d6f5?utm_source=oschina-app 之前鉴于codeblocks界面 ...

  2. Addition Chains POJ - 2248 (bfs / dfs / 迭代加深)

    An addition chain for n is an integer sequence <a0, a1,a2,...,am=""> with the follow ...

  3. python 数据结构之二叉树

    二叉树关键在构建和遍历,python实现相对简单,我们在实现需要用到类,分别设置爱左右子树,根节点,然后从根进行遍历,进行判断,若为空进行树的构建,非空则返回到列表中即可,我在进行遍历时产生了一个错误 ...

  4. vs2008单元测试

    调试是解决错误的过程,测试是发现软件缺陷的过程.每一个软件在交付使用时前都必须经过测试.软件测试是软件开发的重要组成部分,现在已经发展成专门的技术. 在消除了程序中的语法错误和运行错误后,程序仍然不能 ...

  5. scrapy 命令行

    关于命令详细使用 命令的使用范围 这里的命令分为全局的命令和项目的命令,全局的命令表示可以在任何地方使用,而项目的命令只能在项目目录下使用 全局的命令有:startprojectgenspiderse ...

  6. IE和DOM事件流

    * ie采用冒泡型事件 Netscape使用捕获型事件 dom使用先冒泡后捕获事件 冒泡型事件模型: button->div->body (IE事件流) 捕获型事件模型: body-> ...

  7. 高性价比 VPS virtwire Host

    自从bandwagonhost 低端VPS售罄后,很难找到一个 比较性价比高的host做梯子了.今天找到VirtWire Host,带一个独立IPv4,5$/y 的价格还是可以接收的.而且相对于ban ...

  8. 修改Chrome启动参数解决跨域问题

    这个做法仅仅是针对自己本机,只是一个权宜方案 --disable-web-security --user-data-dir=本地用户信息目录 之后启动Chrome浏览器即可

  9. 如何查看linux版本信息

    查看系统信息 [root@root]# hostnamectl Static hostname: root Icon name: computer-desktop Chassis: desktop M ...

  10. c#中base64加密解密

    using System;using System.Text; namespace Common{/// <summary>/// 实现Base64加密解密/// </summary ...