在你閱讀時,預設已經瞭解IOC和autofac的基本用法, 我在最近的我的博客項目中運用了IOC autofac 實現了依賴註入 由於我的項目時asp.net MVC所以我目前向大家展示MVC中如何使用autofac 首先在app_start中新建一個類包含以下方法 這段代碼的意思,就是從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
本次實例很簡單,希望某些大神可以給點關註,給點評價,菜鳥一枚,還望各位海涵,如有代碼錯誤或者其他漏點,請與我聯繫,我將會及時改正,希望與博客園的各位大佬共同進步!每天學習一點點小知識!