zoukankan      html  css  js  c++  java
  • 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的生命周期和特点

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

  • 相关阅读:
    c++回调java方法
    c++ 11学习笔记--智能指针
    c++ 11学习笔记--Lambda 表达式(对比测试Lambda ,bind,Function Object)
    explicit构造函数和private
    c++ 11学习笔记--右值引用和移动构造语义
    c++ 11学习笔记-- 常量表达式(constexpr)
    从京东app学到的(1)
    从文轩商城app学到的
    AntV G2 toolTip 自定义显示
    Ant Design of Vue table表格 点击一行选中效果
  • 原文地址:https://www.cnblogs.com/sandaman2019/p/11273366.html
Copyright © 2011-2022 走看看