在你阅读时,默认已经了解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方式注入使用的更多相关文章

  1. IOC容器MEF在MVC中的使用

    最近想把自己的网站框架用IOC改造下,经过对比,我初步选择autofac,虽然MEF不需要配置,但性能不行,autofac虽然需要自己写自动化注入,但性能非常好. 先分析下各大IOC框架的性能,分两类 ...

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

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

  3. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  4. Ioc容器Autofac系列(1)-- 初窥

     一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...

  5. .net core2.0下Ioc容器Autofac使用

    .net core发布有一段时间了,最近两个月开始使用.net core2.0开发项目,大大小小遇到了一些问题.准备写个系列介绍一下是如何解决这些问题以及对应技术.先从IOC容器Autofac开始该系 ...

  6. [转]Ioc容器Autofac

    本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥   前言 第一次接触A ...

  7. IoC容器Autofac学习笔记

    一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...

  8. MVC中处理Json和JS中处理Json对象

    MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...

  9. 使用Json.Net解决MVC中各种json操作

    最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能. ...

随机推荐

  1. ios开发系列之内存泄漏分析(上)

    ios自从引入ARC机制后,一般的内存管理就可以不用我们码农来负责了,但是一些操作如果不注意,还是会引起内存泄漏. 本文主要介绍一下内存泄漏的原理.常规的检测方法以及出现的常用场景和修改方法. 1.  ...

  2. AppBoxFuture: 大数据表分区的3种策略

      之前的文章"分而治之"在介绍大表分区时,作者尚未实现不同的分区策略,即只能按指定的分区键进行分区.这次作者完善了一下分区策略,在规划大表分区时可以按Hash或者时间范围进行分区 ...

  3. Spring Boot2(四):使用Spring Boot多数据源实现读写分离

    前言 实际业务场景中,不可能只有一个库,所以就有了分库分表,多数据源的出现.实现了读写分离,主库负责增改删,从库负责查询.这篇文章将实现Spring Boot如何实现多数据源,动态数据源切换,读写分离 ...

  4. 后端session的获取

    Request的获取 第一种方法 @Autowired private HttpServletRequest request; 第二种方法 RequestAttributes requestAttri ...

  5. SQLServer性能优化之---数据库级日记监控

    上节回顾:https://www.cnblogs.com/dotnetcrazy/p/11029323.html 4.6.6.SQLServer监控 脚本示意:https://github.com/l ...

  6. ZOJ 3963:Heap Partition(贪心+set+并查集)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3963 题意:给出一个n个数的序列,可以在其中找一个子序列建堆,并且堆中的父 ...

  7. Leetcode 195 Tenth Line

    Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...

  8. kuangbin专题 专题一 简单搜索 Shuffle'm Up POJ - 3087

    题意:(1)有两副颜色多样的扑克牌,(A~H)表示不同颜色,给你两副牌,S1,S2和一副你需要洗出的KEY,S12由S2最底部,S1底部...一直下去,直到洗成S12,就是图片展示的那样.(2)洗好的 ...

  9. SQL Server 根据日期分组、 根据时间段分组(每三个小时一组)

    所用数据表: 一.根据日期分组 1. 使用convert() 函数方式 --根据年月 ),CreatTime,)日期,COUNT(*) 次数,sum(Money)总数 from Orders ),Cr ...

  10. P2344 奶牛抗议 离散化+前缀和+动态规划+树状数组

    [题目背景] Generic Cow Protests, 2011 Feb [题目描述] 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为Ai,数字可正 ...