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的生命周期和特點

本次實例很簡單,希望某些大神可以給點關注,給點評價,菜鳥一枚,還望各位海涵,如有代碼錯誤或者其他漏點,請與我聯系,我將會及時改正,希望與博客園的各位大佬共同進步!每天學習一點點小知識!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM