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

Posted sandaman2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOC容器-Autofac在MVC中实现json方式注入使用相关的知识,希望对你有一定的参考价值。

在你阅读时,默认已经了解IOC和autofac的基本用法,

我在最近的我的博客项目中运用了IOC autofac 实现了依赖注入

由于我的项目时asp.net MVC所以我目前向大家展示MVC中如何使用autofac

首先在app_start中新建一个类包含以下方法

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;

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

内容如下


  "components": [
  
    "type": "SingleBlog.DAL.实现逻辑,SingleBlog.DAL",
    "services": ["type": "SingleBlog.IDAL.抽象的逻辑接口,SingleBlog.IDAL"],
    "autoActivate": true,
    "injectProperties": true
  
  后面可以接着写你的注入内容,注意每个实现的方法只能有一个对应的compoents!

因为我是拿我的项目来介绍,这是根据DAL与IDAL的依赖注入,同理BLL和IBLL都可以,你可以接着写。

这两个文件都是在MVC框架中即UI中,与IBLL和IDAL分离为了方便我放出我的项目图

技术图片

写好了之后,就是如何使用了

 但是在使用之前还必须得在你的项目启动类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的字段,不然不能使用哦!

使用这方法可以简单高效的实现IOC的依赖注入,使得你的项目更加的松耦合!

autofac的使用介绍就到这里,如果还有不明白的,请探寻官网的原理和阅读该地址

https://www.cnblogs.com/wolegequ/archive/2012/06/09/2543452.html 该地址详细介绍了关于autofac

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

 

以上是关于IOC容器-Autofac在MVC中实现json方式注入使用的主要内容,如果未能解决你的问题,请参考以下文章

.NET MVC5+AUTOFAC实战

IOC容器之Autofac

MVC ViewEngine视图引擎解读及autofac的IOC运用实践

ASP.NET MVC IOC依赖注入之Autofac系列开篇

ASP.NET MVC IOC 之 Autofac

ASP.NET MVC IOC依赖注入之Autofac系列- WebForm当中应用