一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

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

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

本篇文章主要介紹了詳解ASP.NET Core 在 JSON 文件中配置依賴注入 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

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

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

下面就來看看應該如何來做這件事情吧。

Getting Started

首先,在應用程序中我們創建一個接口,以供 DI使用:

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

然后,添加一個 IFoo 接口的實現 Foo

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

接下來,我們需要把以上的 IFoo 接口和它的實現添加到 Startup.cs 文件中的ConfigureServices方法中,ConfigureServices 主要是用來配置依賴注入服務的。然后通過該方法提供的ISerciceCollection接口參數注入 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 方法,添加一個生命周期為瞬態的 IFoo 的實現。瞬態就是說在每次請求的時候都將創建一個Foo的實例。

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

使用 json 文件配置 DI

當我們使用json文件配置依賴注入的時候,可以選擇新建一個json文件,也可以直接使用 appsettings.json 文件。現在我們就直接在 appsettings.json 文件中添加關于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"
  }
 ]
}

首先,添加一個名為 “DIServices” 的數組節點,數組中包含一個或多個配置service的對象,serviceType代表服務接口的類型,implementationType接口的實現,lifetime 初始化實例的生命周期。

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

接下來,添加一個和Json文件配置項相對應的一個service類,這里我們需要使用 Newtonsoft 這個json庫。

?
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));
  }
}

然后我們測試一下是否是可用的。

測試

打開 HomeController.cs ,添加注入項:

?
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的構造函數添加IFoo接口,然后在 About 的Action中使用。

運行程序,打開頁面,點擊 About標簽

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

總結

以上即為在 ASP.NET Core 中配置依賴注入到json文件中,這只是一個簡單的實例,不要用在生產環境中。在實際的項目中你還需要處理關于讀取配置異常情況,服務是否存在的異常情況,生命周期等等這些問題。

原文鏈接:http://www.cnblogs.com/savorboard/p/dotnetcore-json-config-di.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎国产视频 | 天天做天天玩天天爽天天 | 4tube欧美高清 | 4444kk在线看片 | 韩国办公室激情 | 日本偷偷操 | 啪啪导航 | 国产香蕉一区二区在线网站 | 变形金刚第一部 | 996热在线视频 | 久久免费看少妇级毛片蜜臀 | 99视频有精品视频免费观看 | 色女的乖男人 | 513热点网深夜影院影院诶 | 52av我爱avhaose01 51香蕉视频 | 久久免费看少妇级毛片蜜臀 | 狠狠五月天中文字幕 | 喷潮女王cytherea全部视频 | 欧美一级在线 | 国产精品成人 | 午夜福利理论片在线播放 | 黄 在线播放 | 免费观看日本视频 | 91免费精品国自产拍在线可以看 | 国内精品91最新在线观看 | 精品在线免费播放 | 4455永久在线观免费看片 | 超强台风免费观看完整版视频 | 日韩一级欧美一级一级国产 | 色综合久久中文字幕综合网 | 97色| 国产成+人+综合+亚洲不卡 | 性欧洲女人18 | 成年女人毛片免费观看中文w | 日本黄a三级三级三级 | 欧美3d怪物交videos网站 | 果冻传媒在线播放观看228集 | 国产精品成人免费福利 | 国产精品久久久久a影院 | 欧美老人与小伙子性生交 | 男女真实无遮挡xx00动态图软件 |