ASP.NET MVC中简单使用Autofac
项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control。控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度。
示例代码:
IProvinceRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Libing.Portal.Web.Models
{
public interface IProvinceRepository
{
List<Libing.Portal.Web.Models.Province> GetProvinceList();
}
}
ProvinceRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Libing.Portal.Web.Models
{
public class ProvinceRepository : IProvinceRepository
{
public List<Libing.Portal.Web.Models.Province> GetProvinceList()
{
using (var ctx = new PortalContext())
{
return ctx.Provinces.ToList();
}
}
}
}
ProvinceController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace Libing.Portal.Web.Controllers
{
public class ProvinceController : Controller
{
private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository; public ProvinceController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository)
{
_provinceRepository = provinceRepository;
} public ActionResult Index()
{
return View(_provinceRepository.GetProvinceList());
}
}
}
ICityRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Libing.Portal.Web.Models
{
public interface ICityRepository
{
List<Libing.Portal.Web.Models.City> GetCityList();
}
}
CityRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Libing.Portal.Web.Models
{
public class CityRepository : ICityRepository
{
public List<Libing.Portal.Web.Models.City> GetCityList()
{
using (var ctx = new PortalContext())
{
return ctx.Cities.ToList();
}
}
}
}
CityController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace Libing.Portal.Web.Controllers
{
public class CityController : Controller
{
private Libing.Portal.Web.Models.IProvinceRepository _provinceRepository;
private Libing.Portal.Web.Models.ICityRepository _cityRepository; public CityController(Libing.Portal.Web.Models.IProvinceRepository provinceRepository, Libing.Portal.Web.Models.ICityRepository cityRepository)
{
_provinceRepository = provinceRepository;
_cityRepository = cityRepository;
} public ActionResult Index()
{
return View(_cityRepository.GetCityList());
}
}
}
Global.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing; using System.Reflection; using Autofac;
using Autofac.Integration.Mvc; namespace Libing.Portal.Web
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); #region Autofac注入依赖
var builder = new ContainerBuilder();
SetupResolveRules(builder);
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
#endregion WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
} private static void SetupResolveRules(ContainerBuilder builder)
{
builder.RegisterType<Libing.Portal.Web.Models.ProvinceRepository>().As<Libing.Portal.Web.Models.IProvinceRepository>();
builder.RegisterType<Libing.Portal.Web.Models.CityRepository>().As<Libing.Portal.Web.Models.ICityRepository>();
}
}
}
在Global.cs中的SetupResolveRules可以使用下面的方式来注册:
private static void SetupResolveRules(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
}
利用ContainerBuilder的RegisterAssemblyTypes()方法来注册组件中的所有类,通过Where()筛选出全部以“Repository”结尾的类,并自动找出这些类所实现的接口,然后设定与其对应。
ASP.NET MVC中简单使用Autofac的更多相关文章
- 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, ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- 在Asp.Net MVC 中配置 Serilog
Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)
在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...
- ASP.NET MVC中的两个Action之间值的传递--TempData
一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...
随机推荐
- linux mysql
安装mysql 1.使用rpm 安装mysql 或者使用yum安装 使用rpm 安装 下载 Centos 7 所需要的mysql包 tar -xf 解压整合包 根据依赖 安装 common>li ...
- MongoDB学习比较-07 C#驱动操作MongoDB
下载驱动 驱动的下载有两种方式:一种是在C#项目中通过NuGet进行安装,另一种是通过下面的链接:https://github.com/mongodb/mongo-csharp-driver/rele ...
- MOTION-MATCHING IN UBISOFT’S FOR HONOR翻译
http://www.gameanim.com/2016/05/03/motion-matching-ubisofts-honor/ Introducing For Honor with a vide ...
- JDK和环境配置
1. JASE : J2SE 这个就是我们现在在学的东西,他是一切Java的核心基础 JAME :J2ME : 他是Java的一个微型版,主要用来做移动开发 JAEE :J2EE Java企业版本,主 ...
- testng xml中按顺序执行java类
如红字部份,将安顺序执行4个类 <?xml version="1.0" encoding="UTF-8"?><suite name=" ...
- 【转】windows消息和消息队列详解
转载出处:http://blog.csdn.net/bichenggui/article/details/4677494 windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...
- android数据库SQLite的设计模式
Dao设计模式可能是使用最多的数据库的设计模式其基本思路是将数据库操作的代码 与设计代码分离以便于维护和升级.具体的实现方法是使用包,然后在设计代码中调 用数据库的操作代码,dao设计模式需要创建5个 ...
- JDBC学习2:为什么要写Class.forName("XXX")?
Class.forName(String name) 接上一篇JDBC.本来这个内容是放在前面的一篇里面的一起的,后来发现越写越多,想想看就算了,还是单独开一篇文章好了,这样也能写得更加详细点. 上一 ...
- Kali Linux渗透测试实战 1.2 环境安装及初始化
1.2 环境安装及初始化 目录(?)[-] 环境安装及初始化 下载映像 安装虚拟机 安装Kali Linux 安装中文输入法 安装VirtualBox增强工具 配置共享目录和剪贴板 运行 Metasp ...
- 作业二:在github上过程
注册Github