在你阅读时,默认已经了解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的生命周期和特点

本次实例很简单,希望某些大神可以给点关注,给点评价,菜鸟一枚,还望各位海涵,如有代码错误或者其他漏点,请与我联系,我将会及时改正,希望与博客园的各位大佬共同进步!每天学习一点点小知识!

转载于:https://www.cnblogs.com/sandaman2019/p/11273366.html

IOC容器-Autofac在MVC中实现json方式注入使用相关推荐

  1. IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc

    阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时,非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一.一个没有使用IoC的例子 IoC的全称是Inversion of ...

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

    Autofac基本使用 Autofac是一款轻量级的IOC框架,使用率上还是挺高的,官方网站http://autofac.org,源码下载地址https://github.com/autofac/Au ...

  3. IoC容器Autofac(2) - 一个简单示例(附demo源码)

    上篇文章中(IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc),我们用自己的方式实现了一个简陋的工厂类来实现IoC. 这里我们尝试使用Auotfac来替换我们的工厂类Mov ...

  4. IoC容器Autofac

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

  5. IoC容器Autofac(3) - 理解Autofac原理,我实现的部分Autofac功能(附源码)

    上篇文章中,举了一个Autofac的简单例子,园友eflay反应: "虽然对autofac架构原理还是完全不懂,不过基本是明白ioc的用途了,会从已注册的类中找出符合接口的类来调用构造函数进 ...

  6. Ioc容器Autofac介绍

    Autofac是轻量级的开源Ioc容器,在这里可以下载http://code.google.com/p/autofac/.如果你用过其他的Ioc容器,那么学习Autofac使用也会比较容易,下面将通过 ...

  7. MVC中返回Json的几种声明方式

    第一种,单行数据 var result = new { name = "linfei", age = "26", address = "wuhan&q ...

  8. php ioc容器,PHP 在Swoole中使用双IoC容器实现无污染的依赖注入

    容器(container)技术(可以理解为全局的工厂方法), 已经是现代项目的标配. 基于容器, 可以进一步实现控制反转, 依赖注入. Laravel 的巨大成功就是构建在它非常强大的IoC容器 il ...

  9. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  10. Spring MVC中返回JSON数据的几种方式

    我们都知道Spring MVC 的Controller方法中默认可以返回ModeAndView 和String 类型,返回的这两种类型数据是被DispatcherServlet拿来给到视图解析器进行继 ...

最新文章

  1. 为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...
  2. JAVA 手机号正则 工具类
  3. 4G通信技术LTE介绍
  4. php 5.6.30 漏洞,PHP 5.6.30 正式发布,安全漏洞修复
  5. 基于多视角学习和个性化注意力机制的新闻推荐(附论文下载链接)
  6. Python实战从入门到精通第七讲——字符串与文本1之字符串开头或结尾匹配
  7. 选择多级分类_商用车齿轮油的选择与运用!!
  8. io里没有driveinfo没有_来福宝宝,愿天堂里没有病痛
  9. Linux安装nginx详细步骤
  10. 检测对象是否拥有某一属性
  11. MLP、RBF、SVM网络比较及其应用前景
  12. MVC的优点及不足之处
  13. 大数据之Linux早课9.14
  14. Low Power概念介绍Level Shifter
  15. Python入门:数据结构之字典(dict)(1)
  16. html5 声控游戏,声控最爱的10款声音类APP,有趣又好玩!
  17. GTC 2020:开发者谈NS版《巫师3》移植
  18. 计步器锁屏后依然工作的原理
  19. java url正则校验,Java正则验证
  20. android手机时钟、闹钟、计时器、秒表app源码

热门文章

  1. 什么时候要用存储过程,存储过程的优点 .
  2. erl_nif中解决调用enif_get_XX错误问题
  3. SQLServer实战经验分享--ServiceBroker安全配置和使用示例
  4. 45本数据分析、Python的书籍,包邮送到家
  5. 精选| 2019年2月R新包推荐
  6. Ubuntu系统---C++之Eclipse IDE 编译器安装
  7. 什么是restful api
  8. IOS transform的使用(移动,放大,旋转)
  9. JSP/Servlet-----charset 、pageEncoding差别
  10. php页面打开响应时间