IOC容器-Autofac在MVC中实现json方式注入使用
在你阅读时,默认已经了解IOC,依赖注入和基本用法,如果还有不懂的小伙伴你们可以去这个地址看看,https://www.bilibili.com/video/av7606481/?p=30,对于依赖注入讲解的很清楚!
我在最近的我的项目中运用了IOC autofac 实现了依赖注入,由于我的项目是asp.net MVC 5 ,所以我目前向大家展示MVC中如何使用autofac
首先在app_start中新建一个类包含以下方法:类名最好取名:AutofacConfig
using System.Reflection;
using Autofac;
using Autofac.Integration.Mvc;
using System.Web.Mvc;
using Microsoft.Extensions.Configuration;
using Autofac.Configuration;
using Microsoft.Extensions.Configuration.Json;//有的小伙伴可能无法安装,因为他是仅支持.net framwork 4.6以上的版本,如果你使用4.6以下的版本,记得修改你的版本号,可以点击你的UI程序项目点击属性修改成4.6.1之后进行安装,安装完成后可以改回来哦! namespace SingleBlog.UI.App_Start
{
public class AutofacConfig
{
public static void Register()//最好使用静态方法
{
//创建容器
var builder = new ContainerBuilder(); IConfigurationBuilder config = new ConfigurationBuilder();
//使用json注册文件
IConfigurationSource autofacJsonConfigSource = new JsonConfigurationSource()
{
Path = "Autofac.json",
Optional = false,//boolean,默认就是false,可不写
ReloadOnChange = false,
};
//配置添加到autofac的configuration内中
config.Add(autofacJsonConfigSource); //将json的文件配置注册到autofac的容器内
var module = new ConfigurationModule(config.Build());
builder.RegisterModule(module); //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller注册
builder.RegisterControllers(Assembly.GetExecutingAssembly()); //创建一个Autofac的容器
var container = builder.Build(); //下面就是使用MVC的扩展 更改了MVC中的注入方式.
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}
这段代码的意思,就是从json文件中读取相应的注入内容!
但是注意!程序集中该引用的必须要引用,我贴出了引用代码为了方便大家去寻找
同时,创建一个根据autofac官网提示IOC的一个json文件,起名为Autofac.json,为了方便我直接放在了UI程序项目的根目录
内容如下
{
//在Autofac的文档中可以设置默认程序集,此处就不设置了
"components": [
{
"type": "程序集.实现逻辑的类,你的实现类的程序集",
"services": [{"type": "接口所在的程序集.接口,接口所在程序集"}],
"autoActivate": true,//是否是自动注入
"injectProperties": true//是否使用属性注入
}
后面可以接着写你的注入内容,注意每个实现的类和接口只能有一个对应的compoents!
},.......后面可以复制粘贴了
因为我是拿我的项目来介绍,这是根据DAL与IDAL的依赖注入,同理BLL和IBLL都可以,你可以接着写。
这两个文件都是在MVC框架中即UI中,与IBLL和IDAL分离为了方便我放出我的项目图

请注意!使用JSON注入需要你在UI项目下引用所有的DLL包括实现类的DLL!
写好了之后,就是如何使用了
但是在使用之前还必须得在你的项目启动类Global.asax中引用autofacconfig类,比如我的引用
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AutofacConfig.Register();//直接调用静态方法
}
之后在项目的控制器中即可以使用BLL和DAL的方法,做到了依赖抽象而不用依赖细节
private IArticleService _articleService;
private IQQUserInfoService _qQUserInfoService;
public IndexController(IArticleService ArticleService,IQQUserInfoService QQUserInfoService)//通过构造函数进行注入
{
this._articleService = ArticleService;
this._qQUserInfoService = QQUserInfoService;
}
这是一个Index控制器,我申明私有的IBLL逻辑,在构造函数中注入进去后使用,即可以访问到BLL的实现逻辑
但是注意在BLL如果要这样做的话,必须申明public类型的属性哦,不然不能使用哦!哦对了,前提你还得在JSON文件中表明你的类和你的接口是允许使用属性注入!
使用这方法可以简单高效的进行IOC的依赖注入,使得你的项目更加的松耦合!
对于泛型注入,官网的实例也有,但是不推荐进行JSON的泛型注入,应该在接口中定义泛型,然后在实现类继承的接口中直接指定类型去调用!
autofac的使用介绍就到这里,如果还有不明白的,请探寻官网的原理和阅读该地址
https://www.cnblogs.com/wolegequ/archive/2012/06/09/2543452.html
该地址详细介绍了关于autofac的生命周期和特点
本次实例很简单,希望某些大神可以给点关注,给点评价,菜鸟一枚,还望各位海涵,如有代码错误或者其他漏点,请与我联系,我将会及时改正,希望与博客园的各位大佬共同进步!每天学习一点点小知识!
IOC容器-Autofac在MVC中实现json方式注入使用的更多相关文章
- IOC容器MEF在MVC中的使用
最近想把自己的网站框架用IOC改造下,经过对比,我初步选择autofac,虽然MEF不需要配置,但性能不行,autofac虽然需要自己写自动化注入,但性能非常好. 先分析下各大IOC框架的性能,分两类 ...
- IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用
Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- Ioc容器Autofac系列(1)-- 初窥
一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...
- .net core2.0下Ioc容器Autofac使用
.net core发布有一段时间了,最近两个月开始使用.net core2.0开发项目,大大小小遇到了一些问题.准备写个系列介绍一下是如何解决这些问题以及对应技术.先从IOC容器Autofac开始该系 ...
- [转]Ioc容器Autofac
本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥 前言 第一次接触A ...
- IoC容器Autofac学习笔记
一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...
- MVC中处理Json和JS中处理Json对象
MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...
- 使用Json.Net解决MVC中各种json操作
最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能. ...
随机推荐
- tkinter + cefpython 仿美团桌面程序
使用js开发桌面程序目前是一个趋势,Electron是其中一个佼佼者,网上也不乏很多文章.今天主要是来讲一下cefpython. 用python的朋友,特别使用过tkinter开发过界面的,一定会觉得 ...
- Dubbo详解-说明(一)
Dubbo 是什么? Dubble是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理的方案. Dubbo 有啥特点? 远程通讯:提供透明化的远程方法的调用,提供 ...
- centos7PXE和cobbler自动部署装机
安装程序启动过程MBR:isolinux/boot.catstage2: isolinux/isolinux.bin配置文件:isolinux/isolinux.cfg 每个对应的菜单选项: 加 ...
- Prometheus 与 Grafana 集成
简介 Grafana 是一个可视化仪表盘,它拥有美观的图标和布局展示,功能齐全的仪表盘和图形编辑器,默认支持 CloudWatch.Graphite.Elasticsearch.InfluxDB.My ...
- 手动实现一个 IOC/DI 容器
第一章为源码解析. 第二章为实现一个简单的 IOC 容器. 第三章进阶 Spring 插件开发. 手动实现一个 IOC/DI 容器 上一篇文章里我们已经对 Spring 的源码有了一个大概的认识,对于 ...
- angular2最详细的开发环境搭建过程
本文所需要的源代码,从 http://files.cnblogs.com/files/lingzhihua/angular2-quickstart.rar 下载 angular官方推荐使用quicks ...
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- html、javascript、url特殊字符的转义诠释及使用方法详解
html.javascript.url特殊字符转义在实际编程中都是有用到的,有的人对特殊字符转义的使用不是很清楚,下面就对html,javascript,url特殊字符的转义做一下说明和归纳. htm ...
- HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)
http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...
- django ORM中的RelatedManager(关联管理器)
关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...