在你阅读时,默认已经了解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. 《Oracle PLSQL从入门到精通》pdf电子版

    链接:https://pan.baidu.com/s/1fhfMtmwM_hOAGgYOfNYlkw提取码:r53a 学习pl/sql的同学,可以看看这本书,讲解的很详细,从入门到精通,大家有什么不懂 ...

  2. linux Apache设置https访问以及加载mod_ssl.so模块以及问题解决

    开始之前的话: 1.配置好服务器防火墙的443端口规则: 2.购买好证书文件,我是沃通证书,准备好证书,这里不演示证书的购买和安装. 3.根据服务器类型下载文件,apache一共有4个文件 这里提供沃 ...

  3. Mybatis_One

    Mabatis的概述 JavaEE开发是分层的:表现层 业务层 持久层 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用 ...

  4. spring cloud 系列第5篇 —— hystrix+turbine 服务的熔断与监控 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.hystrix 简介 1.1 熔断器 在分布式系统中,由于服务之间相互 ...

  5. spring cloud 系列第4篇 —— feign 声明式服务调用 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.feign 简介 在上一个用例中,我们使用ribbon+restTem ...

  6. php实现redis锁机制

    <?php class Redis_lock { public static function getRedis() { $redis = new redis(); $redis->con ...

  7. 为什么很多IT公司不喜欢进过培训机构的人呢

    这几天在知乎看到一个问题“为什么很多IT公司不喜欢进过培训机构的人呢?” 身为IT培训师,这样的问题必然会引起我的关注, 花时间看了各路人士的回答, 我了个去,尽是对培训机构排山倒海的谩骂声, 负面评 ...

  8. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)

    简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...

  9. 2018.10.20 2018NOIP冲刺之酒厂选址

    题目传送门 明显能够看出有一个建图求路程的优化 然而发现10000*10000爆空间QAQ 为了做一些初始化方面的优化 我们发现了一个叫做前缀和的东西 可以在环上查到两个之间的最短距离 同时还要做一些 ...

  10. iOS组件化开发一本地环境配置(一)

    首先我们要使用pod支持组件化开发 解决CocoaPods慢的方案(gem和pod repo换源) gem换源 $ gem sources --remove https://rubygems.org/ ...