IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展、维护更加容易。控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。下面我就用Autofac实现ASP.NET mvc5.0的IOC控制反转的方法。这里用到是vs2013,Autofac ASP.NET MVC 5 Integration和mvc 5.0。Autofac ASP.NET MVC 5 Integration是Autofac的MVC封装库,我们只需要很少的代码就可以实现依赖注入。下面请看详细实例。
1、下载安装相关代码

选中左边的联机,然后在搜索的输入框输入“autofac”

选中Autofac ASP.NET MVC 5 Integration,点击安装,这样你的项目就下载Autofac ASP.NET MVC 5 Integration了这个相关的dll的引用,并自动给添加了相关引用。
2、案例展示
public interface IProductRepository
{
IQueryable<Product> Products { get; }
}
public class EFProductRepository : IProductRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
}
2.1、定义一个Controller依赖IProductRepository接口
public class BuyController : Controller
{
private IProductRepository repository;
public BuyController(IProductRepository repo)
{
repository = repo;
} //此处省略其它代码
}
2.2、绑定IProductRepository接口依赖的具体实现的类
using Autofac;
using Autofac.Integration.Mvc;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.linq;
using System.Web;
using System.Web.Mvc;
using WenMarine.BLL.Abstract;
using WenMarine.BLL.Concrete;
using WenMarine.Web.Infrastructure.Abstract;
using WenMarine.Web.Infrastructure.Concrete;
namespace WenMarine.Web.Infrastructure
{
public class IocConfig
{
public static void RegisterDependencies()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<EFProductRepository>().As<IProductRepository>(); //autofac 注册依赖
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}
2.3、调用IocConfig使依赖生效
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
IocConfig.RegisterDependencies();
}
3、总结
就可以了。这样BuyController高层的代码根本不用改,这样做到了对扩展开发,对修改关闭(OCP-面向对象的开放封闭原则),这个是面向对象程序设计的核心。很好的做到的松耦合,模块之间的耦合性大大降低,让软件扩展、维护更加容易。
IoC实践--用Autofac实现MVC5.0的IoC控制反转方法的更多相关文章
- IoC实践--用Unity实现MVC5.0的IoC控制反转方法
在MVC中,控制器依赖于模型对数据进行处理,也可以说执行业务逻辑.我们可以使用依赖注入(DI)在控制层分离模型层,这边要用到Repository模式,在领域驱动设计(DDD)中,Repository翻 ...
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指 ...
- Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)
一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.S ...
- 控制反转IOC与依赖注入DI【转】
转自:http://my.oschina.net/1pei/blog/492601 一直对控制反转.依赖注入不太明白,看到这篇文章感觉有点懂了,介绍的很详细. 1. IoC理论的背景我们都知道,在采用 ...
- 控制反转IOC与依赖注入DI - 理论篇
学无止境,精益求精 十年河东十年河西,莫欺少年穷 昨天是五一小长假归来上班的第一天,身体疲劳,毫无工作热情.于是就看看新闻,喝喝茶,荒废了一天 也就在昨天,康美同事张晶童鞋让我学习下IOC的理论及实现 ...
- IOC(控制反转)的理解
1.IOC的理论背景 我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑[1]. 图1 软件系统中耦合的对象 如果我们打开机械式手表的后 ...
- AutoFac控制反转
一.AutoFac介绍 Autofac是.NET里IOC(Inversion of Control,控制反转)容器的一种,同类的框架还有Spring.NET,Unity,Castle等.可以通过NuG ...
- AutoFac控制反转 转载https://blog.csdn.net/u011301348/article/details/82256791
一.AutoFac介绍 Autofac是.NET里IOC(Inversion of Control,控制反转)容器的一种,同类的框架还有Spring.NET,Unity,Castle等.可以通过NuG ...
- Spring详解(二)------IOC控制反转
我相信提到 Spring,很多人会脱口而出IOC(控制反转).DI(依赖注入).AOP等等概念,这些概念也是面试官经常问到的知识点.那么这篇博客我们就来详细的讲解 IOC控制反转. ps:本篇博客源码 ...
随机推荐
- 项目评价及第五周PSP的发布
5TH 各组作品ALPHA发布体会 1:俄罗斯方块组做了主要功能,这个项目我自己原来拿c语言做过一部分,感觉此游戏细节特别多,逻辑思维需要组织,以为我的水准来说,感觉做的挺好的. ...
- AngularJS学习---更多模板(More Templating) step 8
1.切换分支 amosli@amosli-pc:~/develop/angular-phonecat$ git checkout step- #切换分支 amosli@amosli-pc:~/deve ...
- python 生产者消费者模型
import time def consumer(name): print("%s开始吃包子了"%name) while True: ret = yield time.sleep( ...
- mysql.sock
Mysql有两种连接方式: (1)TCP/IP (2)socket 对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用. 例如你无须定义连接host的具 ...
- selenium通过WebDriverWait实现ajax测试,实现等页面元素加载完成
WebDriverWait(driver, 10)10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束. http://fox1984.iteye.com/blog/1225265new W ...
- 使用的组件:Jcrop
JcropImage cropping for jQuery Jcrop 是一个功能强大的 jQuery 图像裁剪插件,结合后端程序(例如:PHP)可以快速的实现图片裁剪的功能. 官网地址:http: ...
- haskell debug
最近在学习haskell这门神奇的语言,但是由于print不方便,程序出错的时候都不知道是怎么回事.网上搜了一把发现有这么一个好东西 import Debug.Trace funct :: Integ ...
- 我们为什麽需要有经验的DBA
我们为什麽需要有经验的DBA 自从我进来园子之后,发觉虽然我们分享了很多质量很好的文章给大家,但是大家不一定能够消化得了这些文章 理解这些文章还是需要有一定环境,有环境你解决了,但是可能还有别的捷径减 ...
- Kali Linux Web 渗透测试视频教程—第十课 w3af
Kali Linux Web 渗透测试视频教程—第十课 w3af 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/24/kali-linux-web- ...
- Wix 安装部署(五) Bootstrapper 捆绑安装
Wix的xml配置确实很费劲,忍不住有点像吐槽一下,前四篇完成的功能在Windows Installer中通过配置能很快的弄出来.可惜有很多加了锁的功能在InstallShield Limited E ...