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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - 詳解ASP.NET Core 在 JSON 文件中配置依賴注入

詳解ASP.NET Core 在 JSON 文件中配置依賴注入

2020-04-19 16:46楊曉東 ASP.NET教程

本篇文章主要介紹了詳解ASP.NET Core 在 JSON 文件中配置依賴注入 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

在上一篇文章中寫(xiě)了如何在MVC中配置全局路由前綴,今天給大家介紹一下如何在在 json 文件中配置依賴注入。

在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)時(shí)候,都是提供了專有的接口以供使用第三方的依賴注入組件,比如我們常用的會(huì)使用 Autofac、Untiy、String.Net 等,這些第三放依賴注入組件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到類里面之外,還提供了要么使用 xml 文件,要么使用 json 等,那么在新的 ASP.NET Core 中微軟已經(jīng)默認(rèn)的給我們提供了一個(gè)依賴注入的功能,我們就不再需要借助于第三方組件來(lái)實(shí)現(xiàn)依賴注入了,但是有時(shí)候我們想在配置文件中來(lái)配置依賴注入,微軟本身的 DI 組件并沒(méi)有給我們提供一個(gè)可供配置的文件,那么我們就需要自己來(lái)實(shí)現(xiàn)這個(gè)配置項(xiàng)的功能。個(gè)人覺(jué)得其主要使用場(chǎng)景是一些在編譯時(shí)不能確定實(shí)現(xiàn)的,需要?jiǎng)討B(tài)修改實(shí)現(xiàn)的地方。

下面就來(lái)看看應(yīng)該如何來(lái)做這件事情吧。

Getting Started

首先,在應(yīng)用程序中我們創(chuàng)建一個(gè)接口,以供 DI使用:

?
1
2
3
4
public interface IFoo
{
  string GetInputString(string input);
}

然后,添加一個(gè) IFoo 接口的實(shí)現(xiàn) Foo

?
1
2
3
4
5
6
7
public class Foo : IFoo
{
  public string GetInputString(string input)
  {
    return $"輸入的字符串為:{ input }";
  }
}

接下來(lái),我們需要把以上的 IFoo 接口和它的實(shí)現(xiàn)添加到 Startup.cs 文件中的ConfigureServices方法中,ConfigureServices 主要是用來(lái)配置依賴注入服務(wù)的。然后通過(guò)該方法提供的ISerciceCollection接口參數(shù)注入 Services。

?
1
2
3
4
5
6
public void ConfigureServices(IServiceCollection services)
{
  services.Add(new ServiceDescriptor(serviceType: typeof(IFoo),
                    implementationType: typeof(Foo),
                    lifetime: ServiceLifetime.Transient));
}

這里,我們使用到了 IServiceCollection 里面的 Add 方法,添加一個(gè)生命周期為瞬態(tài)的 IFoo 的實(shí)現(xiàn)。瞬態(tài)就是說(shuō)在每次請(qǐng)求的時(shí)候都將創(chuàng)建一個(gè)Foo的實(shí)例。

以上是默認(rèn)微軟為我們提供的添加依賴注入的方法,下面我們來(lái)看一下怎么來(lái)改造成我們需要的使用 json 文件的方式。

使用 json 文件配置 DI

當(dāng)我們使用json文件配置依賴注入的時(shí)候,可以選擇新建一個(gè)json文件,也可以直接使用 appsettings.json 文件。現(xiàn)在我們就直接在 appsettings.json 文件中添加關(guān)于DI的配置了。

appsettings.json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"Logging": {
  "IncludeScopes": false,
  "LogLevel": {
   "Default": "Debug",
   "System": "Information",
   "Microsoft": "Information"
  }
 },
 
 "DIServices": [
  {
   "serviceType": "[namesapce].IFoo",
   "implementationType": "[namesapce].Foo",
   "lifetime": "Transient"
  }
 ]
}

首先,添加一個(gè)名為 “DIServices” 的數(shù)組節(jié)點(diǎn),數(shù)組中包含一個(gè)或多個(gè)配置service的對(duì)象,serviceType代表服務(wù)接口的類型,implementationType接口的實(shí)現(xiàn),lifetime 初始化實(shí)例的生命周期。

注意:配置文件中的類型必須為全名稱,即包含命名空間。

接下來(lái),添加一個(gè)和Json文件配置項(xiàng)相對(duì)應(yīng)的一個(gè)service類,這里我們需要使用 Newtonsoft 這個(gè)json庫(kù)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
 
public class Service
{
  public string ServiceType { get; set; }
 
  public string ImplementationType { get;set; }
 
  [JsonConverter(typeof(StringEnumConverter))]
  public ServiceLifetime Lifetime { get; set; }
}

然后需要改造一下ConfigureServices,在 ConfigureServices 中讀取配置的 json文件即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void ConfigureServices(IServiceCollection services)
{
  //services.Add(new ServiceDescriptor(serviceType: typeof(IFoo),
  //            implementationType: typeof(Foo),
  //            lifetime: ServiceLifetime.Transient));
 
  var jsonServices = JObject.Parse(File.ReadAllText("appSettings.json"))["DIServices"];
  var requiredServices = JsonConvert.DeserializeObject<List<Service>>(jsonServices.ToString());
 
  foreach (var service in requiredServices) {
    services.Add(new ServiceDescriptor(serviceType: Type.GetType(service.ServiceType),
                      implementationType: Type.GetType(service.ImplementationType),
                      lifetime: service.Lifetime));
  }
}

然后我們測(cè)試一下是否是可用的。

測(cè)試

打開(kāi) HomeController.cs ,添加注入項(xiàng):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class HomeController : Controller
{
  private readonly IFoo _foo;
 
  public HomeController(IFoo foo)
  {
    _foo = foo;
  }
 
  public IActionResult About()
  {
    ViewData["Message"] = _foo.GetInputString("Your application description page.");
 
    return View();
  }
}

在 HomeController的構(gòu)造函數(shù)添加IFoo接口,然后在 About 的Action中使用。

運(yùn)行程序,打開(kāi)頁(yè)面,點(diǎn)擊 About標(biāo)簽

詳解ASP.NET Core 在 JSON 文件中配置依賴注入

總結(jié)

以上即為在 ASP.NET Core 中配置依賴注入到j(luò)son文件中,這只是一個(gè)簡(jiǎn)單的實(shí)例,不要用在生產(chǎn)環(huán)境中。在實(shí)際的項(xiàng)目中你還需要處理關(guān)于讀取配置異常情況,服務(wù)是否存在的異常情況,生命周期等等這些問(wèn)題。

原文鏈接:http://www.cnblogs.com/savorboard/p/dotnetcore-json-config-di.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
主站蜘蛛池模板: 玖玖精品 | 日韩欧美国产一区二区 | 精品一区二区三区中文字幕老牛 | 九九久久久 | 中文字幕在线观看1 | 欧美性猛片 | 欧美香蕉 | 亚洲乱码一区二区三区在线观看 | 中国黄色三级毛片 | 亚洲一区中文字幕在线观看 | 精品亚洲一区二区三区四区五区 | 成人片网址 | 久久久久久久久99精品 | 亚洲经典一区 | 一区在线视频 | 亚洲性网| 国产精品久久久久久吹潮 | 国产男女免费视频 | 亚洲成人一区二区三区在线观看 | 91精品中文字幕一区二区三区 | 国产精品毛片无码 | 国产一区二区日韩 | av网站入口 | 在线视频自拍 | 国内精品久久久久久久97牛牛 | 91超碰在线观看 | 亚洲精品视频网 | 免费av观看| 狠狠天天 | 亚洲精品视频在线 | 成人免费视频网址 | 欧美午夜精品久久久久免费视 | 亚洲性片 | 性色aⅴ免费视频 | 欧美精品一区三区 | 国产色视频 | 久久免费精品视频 | 免费黄色在线观看 | 91精品国产综合久久久久 | 国产精品久久电影观看 | 久久精品久久久久久 |