开发环境:vs2015、.net4.5.2、mvc5、ef6

Autofac简介

IOC控制反转(Inversion of Control,缩写为IOC),Autofac是一个开源的依赖注入框架,Autofac是asp.net中比较常用的IOC容器之一

IOC的目标是消除代码中的new(实例化)语句,把实例化类的控制权转移到别的地方,这个地方通常会在一个程序加载时只执行一次的全局方法中,达到解耦的目的。

DI依赖注入(Dependency Injection,缩写为DI),组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

三层架构

Autofac安装

通过Nuget安装Autofac和Autofac.Mvc5

Autofac配置

1、App_Start文件夹里新建AutoFacConfig.cs

using System;
using System.Reflection;
using System.Web.Mvc;
using Autofac;
using Autofac.Integration.Mvc;
namespace cms.Web
{
public class AutoFacConfig
{
public static void Register()
{
var builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetCallingAssembly())//注册mvc的Controller
.PropertiesAutowired();//属性注入 //1、无接口类注入
//builder.RegisterType<BLL.newsClassBLL>().AsSelf().InstancePerRequest().PropertiesAutowired(); //2、有接口类注入
//注入BLL,UI中使用
builder.RegisterAssemblyTypes(typeof(BLL.BaseBLL<>).Assembly)
.AsImplementedInterfaces() //是以接口方式进行注入
.InstancePerRequest() //每次http请求
.PropertiesAutowired(); //属性注入 //注入DAL,BLL层中使用
builder.RegisterAssemblyTypes(typeof(DAL.BaseDAL<>).Assembly).AsImplementedInterfaces()
.InstancePerRequest().PropertiesAutowired(); //属性注入 //Cache的注入,使用单例模式
//builder.RegisterType<RedisCacheManager>()
// .As<ICacheManager>()
// .SingleInstance()
// .PropertiesAutowired(); //移除原本的mvc的容器,使用AutoFac的容器,将MVC的控制器对象实例交由autofac来创建
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
}
}

2、Global.asax配置Autofac

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); BundleTable.EnableOptimizations = true;//js、css压缩
MiniProfilerEF6.Initialize();//MiniProfiler监控ef
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();//webapi默认JSON
AutoFacConfig.Register();//autofac:控制反转,依赖注入配置
}

Autofac使用

使用构造函数注入

using System;
using System.Web.Mvc;
using cms.Model;
using cms.IBLL;
//using cms.BLL; //不需要应用bll,但需要引用IBLL
namespace cms.Web.Areas.Admin.Controllers
{
public class NewsController : BaseController
{
//未使用Autofac前直接实例化的写法
//public newsBLL bll = new newsBLL();

      //autofac属性注入
public InewsClassBLL bll { get; set; } [HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Add(news vmodel,FormCollection forms)
{
news model = new news();
model.title = Request["title"];
model.times = DateTime.Now;
model = bll.Add(model);
if (model.ID > )
{
return RedirectToAction("list");
}
ViewData["mess"] = "添加失败";
return View(vmodel);
} public ActionResult Edit(int id)
{
news model = bll.Find(id);
return View(model);
} // GET: Admin/Admins/Delete/5
public ActionResult Delete(int id)
{
if (bll.Delete(id))
{
return Redirect(Request.UrlReferrer.ToString());
}
else
{
Common.JSHelper.AlertRedirect("操作失败", Request.UrlReferrer.ToString());
}
return RedirectToAction("list");
}
}
}

//ui层不再依赖于BLL,只依赖于IBLL,BLL可以随意变动

end

Asp.Net MVC三层架构之autofac使用教程的更多相关文章

  1. ASP.Net MVC+EF架构

    ASP.Net MVC是UI层的框架,EF是数据访问的逻辑. 如果在Controller中using DbContext,把查询的结果的对象放到cshtml中显示,那么一旦在cshtml中访问关联属性 ...

  2. MVC三层架构搭建

    MVC三层架构搭建 项目主要是用三层来搭建项目,三层分为表现层,数据层和业务层.项目用了目前比较流行的IOC架构.目前流行的IoC 框架有AutoFac,Unity,Spring.NET等,项目中选用 ...

  3. Asp.net mvc项目架构分享系列之架构概览

    Asp.net mvc项目架构分享系列之架构概览 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...

  4. MVC三层架构编程(Dao、service、servlet 之间的关系)

    木哈哈~先开心一会儿,人生的第一篇博客aaa.我一定好好写.不过之前也没怎么看别人写过,还是有点小激动呢,加油.好好总结,会总结的宝宝才会有提高! 今天想总结一下mvc三层架构模型编程,宝宝学习不怎么 ...

  5. ASP.NET的三层架构(DAL,BLL,UI)

    ASP.NET的三层架构(DAL,BLL,UI) BLL   是业务逻辑层   Business   Logic   Layer DAL   是数据访问层   Data   Access   Laye ...

  6. Angular JS从入门基础 mvc三层架构 常用指令

    Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  7. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  8. asp.net中三层架构与mvc之区别?

    对于标题中的问题,如果是没有同时接触三层架构和mvc的初级.net开发人员,想必一定会非常糊涂和混淆.关于此我也百度过N回,看过N多帖子和 回答,但几乎没有人能表述清楚.近期我从典型mvc+entit ...

  9. 全面解析ASP.NET MVC模块化架构方案

    什么叫架构?揭开架构神秘的面纱,无非就是:分层+模块化.任意复杂的架构,你也会发现架构师也就做了这两件事. 本文将会全面的介绍我们团队在模块化设计方面取得的经验.之所以加了“全面”二字,是因为本文的内 ...

随机推荐

  1. Linux学习笔记8

    其他常用命令 cd+回车=回车~ 进入当前用户主目录 查看指定进程信息 #ps -ef |grep  进程名 #ps  ---查看属于自己的进程 #ps -aux  查看所有用户的执行进程 换成  p ...

  2. word插入行

    如何在Word中添加多行或多列 在弹出的列表中选择[插入],再选择[在下方插入行]即可. 选择多少行就可添加多少行. 按F4重复上一操作可快速添加. 添加列也同样如此,选中一个单元格,右键单击,在弹出 ...

  3. 测试中,重现偶发的BUG问题。

    1.严格按用例执行: 2.如果是作随机测试时,把测试步骤的点进行速记; 3.偶发BUG一般都是严重的,保留现场,让开发人员一起分析留下的现场(如数据的变化,界面窗口的变化等,找出问题的引子,那怕是千丝 ...

  4. 多轴APM飞控调参

    调参步骤: 遥控器,电动机和电调对应的APM飞控连线——遥控器校准——电调行程校准——加速度计校准——磁罗盘校准——故障保护设定(遥控器和飞控)——飞行模式设定并调整——自动调参设定选项 APM飞控调 ...

  5. mongoDB,mongoose,没有数组就添加,如果有了数组,就向数组中添加新元素

    db.getCollection('photos').findOneAndUpdate("5b028e71f32bd5004f905879",   //findByIdAndUpd ...

  6. C++程序设计方法3:default修饰符

    编译器自动生成的成员函数 如果以下成员函数用户都没有为类实现,则编译器会自动为类生成他们的缺省的实现 默认构造函数,空函数,什么也不做 析构函数,空函数,什么也不做: 拷贝构造函数-按bit位复制对象 ...

  7. css3 学习 重点 常用

    1 -webkit-    -moz-   -o-浏览器兼容 2 box-sizing:border-box;   两个近乎一样的div一样的样式 平分一个div  定义:属性允许您以确切的方式定义适 ...

  8. HDU 5985 Lucky Coins 数学

    Lucky Coins 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5985 Description Bob has collected a lot ...

  9. unique_ptr_c++11

    unique_ptr 替代了原来的auto_ptr,指向对象具有唯一性,即同一时间只能有unique_ptr指向给定对象(和auto_ptr不同是禁止拷贝语义,通过移动语义替代) unique_ptr ...

  10. JS自学笔记01

    JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...