亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年02月03日 15:38:47   作者:楊曉東  
本篇文章主要介紹了詳解ASP.NET Core 在 JSON 文件中配置依賴注入 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

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

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

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

Getting Started

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

public interface IFoo
{
  string GetInputString(string input);
}

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

public class Foo : IFoo
{
  public string GetInputString(string input)
  {
    return $"輸入的字符串為:{ input }";
  }
}

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

public void ConfigureServices(IServiceCollection services)
{
  services.Add(new ServiceDescriptor(serviceType: typeof(IFoo), 
                    implementationType: typeof(Foo), 
                    lifetime: ServiceLifetime.Transient));
}

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

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

使用 json 文件配置 DI

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

appsettings.json

 "Logging": {
  "IncludeScopes": false,
  "LogLevel": {
   "Default": "Debug",
   "System": "Information",
   "Microsoft": "Information"
  }
 },

 "DIServices": [
  {
   "serviceType": "[namesapce].IFoo",
   "implementationType": "[namesapce].Foo",
   "lifetime": "Transient"
  }
 ]
}

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

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

接下來,添加一個和Json文件配置項相對應(yīng)的一個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的構(gòu)造函數(shù)添加IFoo接口,然后在 About 的Action中使用。

運行程序,打開頁面,點擊 About標(biāo)簽

總結(jié)

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

相關(guān)文章

  • Asp.net core中RedisMQ的簡單應(yīng)用實現(xiàn)

    Asp.net core中RedisMQ的簡單應(yīng)用實現(xiàn)

    這篇文章主要介紹了Asp.net core中RedisMQ的簡單應(yīng)用實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • VB.NET拷貝整個目錄下所有子目錄及文件的實例代碼

    VB.NET拷貝整個目錄下所有子目錄及文件的實例代碼

    這篇文章介紹了拷貝整個目錄下所有子目錄及文件的代碼,有需要的朋友可以參考一下
    2013-07-07
  • asp.net String.Empty NULL 不同之處

    asp.net String.Empty NULL 不同之處

    在asp.net(c#)中String.Empty、NULL、"" 3個語法經(jīng)常使用,作用是判斷字符串是否為空。
    2009-06-06
  • RedisRepository 分享和糾錯

    RedisRepository 分享和糾錯

    本文主要介紹了RedisRepository分享和糾錯。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • asp.net實現(xiàn)文件無刷新上傳方法匯總

    asp.net實現(xiàn)文件無刷新上傳方法匯總

    本文給大家介紹的是asp.net實現(xiàn)文件無刷新上傳的2種方法,分別是使用swfupload插件和uploadify插件,講述的十分細(xì)致全面,附上示例,有需要的小伙伴可以參考下。
    2015-06-06
  • Asp.Net Core添加請求頭自定義認(rèn)證的示例

    Asp.Net Core添加請求頭自定義認(rèn)證的示例

    這篇文章主要介紹了Asp.Net Core添加請求頭自定義認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下
    2021-04-04
  • IIS實現(xiàn)反向代理時Cookie域的設(shè)置方法

    IIS實現(xiàn)反向代理時Cookie域的設(shè)置方法

    這篇文章主要給大家介紹了關(guān)于IIS實現(xiàn)反向代理時Cookie域的設(shè)置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺包

    Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺包

    這篇文章主要為大家詳細(xì)介紹了Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺包 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • .Net平臺開發(fā)實踐的一些點滴總結(jié)(技術(shù)規(guī)范與實踐精華)

    .Net平臺開發(fā)實踐的一些點滴總結(jié)(技術(shù)規(guī)范與實踐精華)

    以下是本人對.Net平臺開發(fā)實踐的一些點滴總結(jié)。這里的技術(shù)規(guī)范主要是開發(fā)過程的代碼規(guī)范、數(shù)據(jù)庫設(shè)計規(guī)范、Com和.Net互操作規(guī)范;實踐精華是對技術(shù)實踐過程中的部分總結(jié)。
    2010-04-04
  • asp.net音頻轉(zhuǎn)換之.amr轉(zhuǎn).mp3(利用ffmpeg轉(zhuǎn)換法)

    asp.net音頻轉(zhuǎn)換之.amr轉(zhuǎn).mp3(利用ffmpeg轉(zhuǎn)換法)

    AMR轉(zhuǎn)MP3可實現(xiàn)將手機上的AMR錄音轉(zhuǎn)換成流行的MP3格式,以適用更廣泛的應(yīng)用。AMR的體積非常小,適用于存儲在手機中,當(dāng)我們想將在手機上的音頻上傳到網(wǎng)絡(luò),就需要將其轉(zhuǎn)換成MP3等流行的格式,本文就是介紹asp.net利用ffmpeg轉(zhuǎn)換法將.amr轉(zhuǎn).mp3的方法,下面來一起看看吧。
    2016-12-12

最新評論