.Net Core簡單使用Mvc內(nèi)置的Ioc(續(xù))
本文基于 .NET Core 2.0。
上一章《[.Net Core] 簡單使用 Mvc 內(nèi)置的 Ioc》已經(jīng)對日常 Mvc 中的 Ioc 的簡單用法進(jìn)行了說明,此外還有一些需要補(bǔ)充的內(nèi)容。
接下來會圍繞著這些疑問進(jìn)行回答:AOP 中 Filter 和 Ioc 的結(jié)合使用是啥樣子的呢? 怎樣直接獲取 Ioc 中的實例對象,而不是以構(gòu)造函數(shù)的方式進(jìn)行獲取呢?
目錄
場景一:Ioc 結(jié)合過濾器 Filter 使用
場景二:直接獲取 Ioc 管理的對象
場景一:Ioc 結(jié)合過濾器 Filter 使用
先編寫一個過濾器 ExceptionFilter.cs,繼承 IExceptionFilter,主要是用于錯誤時記錄日志,使用的命名空間是 Microsoft.AspNetCore.Mvc.Filters。
using Microsoft.AspNetCore.Mvc.Filters; namespace IocCoreDemo { public class ExceptionFilter : IExceptionFilter { private readonly LogService _logService; public ExceptionFilter(LogService logService) { _logService = logService; } public void OnException(ExceptionContext context) { _logService.Error(context.Exception.Message); } } }
LogService.cs 打印日志的類:
public class LogService { public void Error(string message) { Console.WriteLine(message); } }
我在控制器 Demo4Controller.cs 內(nèi)部的 Index() 方法中顯式的讓它拋出尚未實現(xiàn)的異常來進(jìn)行測試:
public class Demo4Controller : Controller { public IActionResult Index() { throw new NotImplementedException(); } }
接下來,是在核心的 Startup.cs 中的 ConfigureServices() 方法內(nèi)修改代碼,小編使用 AddSingleton() 作為示例方法進(jìn)行注入:
public void ConfigureServices(IServiceCollection services) { services.AddSingleton(typeof(ExceptionFilter)); //注入 ExceptionFilter services.AddSingleton(typeof(LogService)); //注入 LogService services.AddMvc(x => { //創(chuàng)建一個 ServiceProvider 對象 var provider = services.BuildServiceProvider(); var filter = provider.GetService<ExceptionFilter>(); //添加過濾器 x.Filters.Add(filter); }); }
啟動程序并跳轉(zhuǎn)到路徑 http://localhost:port/demo4 后,我們發(fā)現(xiàn)能夠觸發(fā)異常過濾器:
場景二:直接獲取 Ioc 管理的對象
測試用的服務(wù)類 Demo5Service.cs:
public class Demo5Service { public string Test() { return Guid.NewGuid().ToString(); } }
方法一
我們可以在控制器內(nèi)通過 this.HttpContext.RequestServices.GetService() 的方式獲取已經(jīng)注入 Ioc 內(nèi)的服務(wù)對象,如控制器 Demo5Controller.cs:
public class Demo5Controller : Controller { public IActionResult Index() { var demoService = (Demo5Service) this.HttpContext.RequestServices.GetService(typeof(Demo5Service)); return Json(demoService.Test()); } }
不要忘記在 Startup.cs 中注入服務(wù)類:
執(zhí)行結(jié)果:
方法二
通過場景一知道:ServiceProvider 類中的 GetService() 方法可以獲取已經(jīng)注入的 Ioc 對象,這樣我們可以考慮從如何獲取該對象(ServiceProvider 類對象)著手。
下面,我在 Startup.cs 類中添加一個靜態(tài)的 ServiceProvider 類成員屬性,方便可以從外部獲?。?/p>
public class Startup { public static ServiceProvider ServiceProvider { get; private set; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSingleton<Demo5Service>(); ServiceProvider = services.BuildServiceProvider(); } //... }
之后,我們可以采取這樣的方式獲取 Ioc 中已經(jīng)注入的對象:
public class Demo5Controller : Controller { public IActionResult Index() { var demoService = (Demo5Service)Startup.ServiceProvider.GetService(typeof(Demo5Service)); return Json(demoService.Test()); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后臺管理系統(tǒng)之前端頁面框架構(gòu)建源碼分享
- asp.net CommunityServer中的wwwStatus
- .Net Core簡單使用Mvc內(nèi)置的Ioc
- Spring.Net控制反轉(zhuǎn)IoC入門使用
- ASP.NET Core應(yīng)用中與第三方IoC/DI框架的整合
- MVC使用Spring.Net應(yīng)用IOC(依賴倒置)學(xué)習(xí)筆記3
- .net MVC使用IPrincipal進(jìn)行Form登錄即權(quán)限驗證(3)
- .net MVC使用Session驗證用戶登錄(4)
- .NET Unity IOC框架使用實例詳解
相關(guān)文章
.NET Core 3.0之創(chuàng)建基于Consul的Configuration擴(kuò)展組件
在本文里小編給大家分享了關(guān)于.NET Core 3.0之創(chuàng)建基于Consul的Configuration擴(kuò)展組件相關(guān)知識點,需要的朋友們學(xué)習(xí)下。2019-05-05使用.NET?6開發(fā)TodoList應(yīng)用之引入數(shù)據(jù)存儲的思路詳解
在這篇文章中,我們僅討論如何實現(xiàn)數(shù)據(jù)存儲基礎(chǔ)設(shè)施的引入,具體的實體定義和操作后面專門來說。對.NET?6開發(fā)TodoList引入數(shù)據(jù)存儲相關(guān)知識感興趣的朋友一起看看吧2021-12-12asp.net Excel轉(zhuǎn)換為SQL Server的方法
辦公軟件Excel是一種常用的電子表格軟件,在編程項目中有需要將Excel轉(zhuǎn)換為SQL Server數(shù)據(jù)庫的需求,本文對此進(jìn)行一些介紹并給出設(shè)計代碼。2009-06-06asp.net運行提示未將對象引用設(shè)置到對象的實例錯誤解決方法
asp.net運行提示未將對象引用設(shè)置到對象的實例錯誤解決方法,需要的朋友可以參考下2012-03-03Visual Studio 2017開發(fā)環(huán)境的安裝圖文教程
Visual Studio 2017是微軟于2017年3月8日正式推出的新版本,是迄今為止 最具生產(chǎn)力 的 Visual Studio 版本。這篇文章主要介紹了Visual Studio 2017開發(fā)環(huán)境的安裝,需要的朋友可以參考下2017-11-11顯示非站點目錄及映射網(wǎng)絡(luò)磁盤路徑的圖片
本文就將教你怎樣顯示非站點目錄下的圖片,你可以顯示站點所在服務(wù)器所有驅(qū)動器目錄的圖片,以及映射網(wǎng)絡(luò)磁盤路徑的圖片,感興趣的朋友可以了解下就當(dāng)鞏固知識了或許對你學(xué)習(xí).net有所幫助2013-02-02Visual Studio 2017下ASP.NET CORE的TagHelper智能提示解決辦法
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017下ASP.NET CORE TagHelper智能提示的解決辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03