国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .Net Core簡單使用Mvc內置的Ioc(續)

.Net Core簡單使用Mvc內置的Ioc(續)

2020-05-25 13:51反骨仔 ASP.NET教程

怎樣直接獲取Ioc中的實例對象,而不是以構造函數的方式進行獲取呢?這篇文章繼續為大家介紹.Net Core簡單使用Mvc內置的Ioc

本文基于 .NET Core 2.0。
上一章《[.Net Core] 簡單使用 Mvc 內置的 Ioc》已經對日常 Mvc 中的 Ioc 的簡單用法進行了說明,此外還有一些需要補充的內容。

接下來會圍繞著這些疑問進行回答:AOP 中 Filter 和 Ioc 的結合使用是啥樣子的呢? 怎樣直接獲取 Ioc 中的實例對象,而不是以構造函數的方式進行獲取呢? 

目錄

場景一:Ioc 結合過濾器 Filter 使用
場景二:直接獲取 Ioc 管理的對象 

場景一:Ioc 結合過濾器 Filter 使用

先編寫一個過濾器 ExceptionFilter.cs,繼承 IExceptionFilter,主要是用于錯誤時記錄日志,使用的命名空間是 Microsoft.AspNetCore.Mvc.Filters。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 打印日志的類:

?
1
2
3
4
5
6
7
public class LogService
  {
    public void Error(string message)
    {
      Console.WriteLine(message);
    }
  }

我在控制器 Demo4Controller.cs 內部的 Index() 方法中顯式的讓它拋出尚未實現的異常來進行測試:

?
1
2
3
4
5
6
7
public class Demo4Controller : Controller
  {
    public IActionResult Index()
    {
      throw new NotImplementedException();
    }
  }

接下來,是在核心的 Startup.cs 中的 ConfigureServices() 方法內修改代碼,小編使用 AddSingleton() 作為示例方法進行注入:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void ConfigureServices(IServiceCollection services)
    {
      services.AddSingleton(typeof(ExceptionFilter));   //注入 ExceptionFilter
      services.AddSingleton(typeof(LogService));     //注入 LogService
 
      services.AddMvc(x => {
        //創建一個 ServiceProvider 對象
        var provider = services.BuildServiceProvider();
        var filter = provider.GetService<ExceptionFilter>();
 
        //添加過濾器
        x.Filters.Add(filter);
      });
    }

.Net Core簡單使用Mvc內置的Ioc(續)

啟動程序并跳轉到路徑 http://localhost:port/demo4 后,我們發現能夠觸發異常過濾器:

.Net Core簡單使用Mvc內置的Ioc(續)

場景二:直接獲取 Ioc 管理的對象

測試用的服務類 Demo5Service.cs:

?
1
2
3
4
5
6
7
public class Demo5Service
  {
    public string Test()
    {
      return Guid.NewGuid().ToString();
    }
}

方法一

我們可以在控制器內通過 this.HttpContext.RequestServices.GetService() 的方式獲取已經注入 Ioc 內的服務對象,如控制器 Demo5Controller.cs:

?
1
2
3
4
5
6
7
8
public class Demo5Controller : Controller
  {
    public IActionResult Index()
    {
      var demoService = (Demo5Service) this.HttpContext.RequestServices.GetService(typeof(Demo5Service));
      return Json(demoService.Test());
    }
  }

不要忘記在 Startup.cs 中注入服務類:

.Net Core簡單使用Mvc內置的Ioc(續)

執行結果:

.Net Core簡單使用Mvc內置的Ioc(續)

方法二

通過場景一知道:ServiceProvider 類中的 GetService() 方法可以獲取已經注入的 Ioc 對象,這樣我們可以考慮從如何獲取該對象(ServiceProvider 類對象)著手。

下面,我在 Startup.cs 類中添加一個靜態的 ServiceProvider 類成員屬性,方便可以從外部獲取:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
    }
 
    //...
  }

.Net Core簡單使用Mvc內置的Ioc(續)

之后,我們可以采取這樣的方式獲取 Ioc 中已經注入的對象:

?
1
2
3
4
5
6
7
8
public class Demo5Controller : Controller
 {
  public IActionResult Index()
  {
   var demoService = (Demo5Service)Startup.ServiceProvider.GetService(typeof(Demo5Service));
   return Json(demoService.Test());
  }
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/liqingwen/p/8585119.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国内精品一级毛片国产99 | 久久成人一区二区 | 欧美国产在线观看 | 亚洲国产欧美日韩 | 亚洲视频欧美视频 | 欧美精品自拍 | 国产欧美一区二区三区在线看 | 91电影院| 99视频在线免费 | 国产精品久久久久久一区二区三区 | 亚洲精品欧洲精品 | 久久噜噜噜精品国产亚洲综合 | 国产精品久久久久国产a级 最新国产视频 | 久久精品成人一区二区三区蜜臀 | 在线天堂v | 五月天婷婷激情 | 特黄特色的大片观看免费视频 | 99热国产精品 | a级毛片免费在线 | 国产欧美精品一区二区三区四区 | 日本不卡一区二区 | 不卡一二区 | 欧美做爰一区二区三区 | 亚洲五码在线 | 日本高清视频网站www | 成人免费视频在线观看 | 国产成人精品在线 | 国产精品亚洲一区二区三区 | 日日操操 | 91免费视频网站 | 欧美日韩在线观看一区二区 | 天天操综合网 | 久久久国产视频 | 久久综合av | 日韩精品在线观看免费 | 成av在线 | 在线观看免费视频黄 | 久久久亚洲国产天美传媒修理工 | 婷婷久 | 欧美国产精品一区二区三区 | 精品乱码一区二区三四区 |