首頁 後端開發 C#.Net教程 .NET配置 JSON 中依賴注入的方法介紹

.NET配置 JSON 中依賴注入的方法介紹

May 13, 2017 am 11:28 AM
asp.net core json 依賴注入

這篇文章主要介紹了詳解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使用:


# #

public interface IFoo
{
  string GetInputString(string input);
}
登入後複製

然後,加入一個

IFoo 介面的實作Foo


#

public class Foo : IFoo
{
  public string GetInputString(string input)
  {
    return $"输入的字符串为:{ input }";
  }
}
登入後複製

接下來,我們需要把以上的

IFoo 介面和它的實作加入到Startup.cs 檔案中的ConfigureServices方法中,ConfigureServices 主要是用來設定依賴注入服務的。然後透過此方法提供的ISerciceCollection介面參數注入 Services。


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


 "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庫。



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檔案即可。


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 ,新增註入項目:

##

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檔案中,這只是一個簡單的實例,不要用在生產環境中。在實際的專案中你還需要處理關於讀取配置異常情況,服務是否存在的異常情況,生命週期等等這些問題。

【相關推薦】

1. 特別推薦#:「php程式設計師工具箱」V0.1版本下載

2. ASP免費影片教學

3. 李炎恢ASP基礎影片教學

#

以上是.NET配置 JSON 中依賴注入的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個不同的MySQL資料庫版本,它們之間有以下一些主要差異:效能改進:MySQL8.0相對於MySQL5.7有一些效能改進。其中包括更好的查詢優化器、更有效率的查詢執行計劃產生、更好的索引演算法和平行查詢等。這些改進可以提高查詢效能和整體系統效能。 JSON支援:MySQL8.0引入了對JSON資料類型的原生支持,包括JSON資料的儲存、查詢和索引。這使得在MySQL中處理和操作JSON資料變得更加方便和有效率。事務特性:MySQL8.0引進了一些新的事務特性,如原子

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

Pandas使用教學:讀取JSON檔案的快速入門 Pandas使用教學:讀取JSON檔案的快速入門 Jan 13, 2024 am 10:15 AM

快速入門:Pandas讀取JSON檔案的方法,需要具體程式碼範例引言:在資料分析和資料科學領域,Pandas是一個重要的Python庫之一。它提供了豐富的功能和靈活的資料結構,能夠方便地對各種資料進行處理和分析。在實際應用中,我們經常會遇到需要讀取JSON檔案的情況。本文將介紹如何使用Pandas來讀取JSON文件,並附上特定的程式碼範例。一、Pandas的安裝

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉中文的實作方法在開發中,我們經常會遇到需要處理JSON資料的情況,而JSON中的Unicode編碼在一些場景下會為我們帶來一些問題,特別是當需要將Unicode編碼轉換為中文字元時。在PHP中,有一些方法可以幫助我們實現這個轉換過程,以下將介紹常用的方法,並提供具體的程式碼範例。首先,讓我們先來了解一下JSON中Un

PHP 數組轉 JSON 的快捷技巧 PHP 數組轉 JSON 的快捷技巧 May 03, 2024 pm 06:33 PM

PHP陣列可透過json_encode()函數轉換為JSON字串(例如:$json=json_encode($array);),反之亦可用json_decode()函數從JSON轉換為陣列($array=json_decode($json);) 。其他技巧還包括:避免深度轉換、指定自訂選項以及使用第三方程式庫。

Golang函數參數傳遞中的依賴注入模式 Golang函數參數傳遞中的依賴注入模式 Apr 14, 2024 am 10:15 AM

在Go中,依賴注入(DI)模式透過函數參數傳遞實現,類型包括值傳遞和指標傳遞。在DI模式中,依賴項通常以指標傳遞,以提高解耦性、減少鎖爭用和支援可測試性。透過使用指針,函數與特定實作解耦,因為它只依賴介面類型。指標傳遞還可以減少傳遞大物件的開銷,從而減少鎖爭用。此外,DI模式可以輕鬆地為使用DI模式的函數編寫單元測試,因為可以輕鬆地模擬依賴項。

如何使用 PHP 函數處理 JSON 資料? 如何使用 PHP 函數處理 JSON 資料? May 04, 2024 pm 03:21 PM

PHP提供了以下函數來處理JSON資料:解析JSON資料:使用json_decode()將JSON字串轉換為PHP數組。建立JSON資料:使用json_encode()將PHP陣列或物件轉換為JSON字串。取得JSON資料的特定值:使用PHP數組函數存取特定值,例如鍵值對或陣列元素。

See all articles