中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

ASP.NETCore在JSON文件中如何配置依賴注入-創(chuàng)新互聯(lián)

這篇文章主要介紹ASP.NET Core在JSON文件中如何配置依賴注入,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括應(yīng)城網(wǎng)站建設(shè)、應(yīng)城網(wǎng)站制作、應(yīng)城網(wǎng)頁制作以及應(yīng)城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,應(yīng)城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到應(yīng)城省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

如何在在 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è)依賴注入的功能,我們就不再需要借助于第三方組件來實(shí)現(xiàn)依賴注入了,但是有時(shí)候我們想在配置文件中來配置依賴注入,微軟本身的 DI 組件并沒有給我們提供一個(gè)可供配置的文件,那么我們就需要自己來實(shí)現(xiàn)這個(gè)配置項(xiàng)的功能。個(gè)人覺得其主要使用場(chǎng)景是一些在編譯時(shí)不能確定實(shí)現(xiàn)的,需要?jiǎng)討B(tài)修改實(shí)現(xiàn)的地方。

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

Getting Started

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


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

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


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

接下來,我們需要把以上的 IFoo接口和它的實(shí)現(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 方法,添加一個(gè)生命周期為瞬態(tài)的 IFoo的實(shí)現(xiàn)。瞬態(tài)就是說在每次請(qǐng)求的時(shí)候都將創(chuàng)建一個(gè)Foo的實(shí)例。

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

使用 json 文件配置 DI

當(dāng)我們使用json文件配置依賴注入的時(shí)候,可以選擇新建一個(gè)json文件,也可以直接使用 appsettings.json 文件?,F(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"
  }
 ]
}

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

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

接下來,添加一個(gè)和Json文件配置項(xiàng)相對(duì)應(yīng)的一個(gè)service類,這里我們需要使用 Newtonsoft 這個(gè)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));
  }
}

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

測(cè)試

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


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)行程序,打開頁面,點(diǎn)擊 About標(biāo)簽


ASP.NET Core在JSON文件中如何配置依賴注入

以上是“ASP.NET Core在JSON文件中如何配置依賴注入”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章題目:ASP.NETCore在JSON文件中如何配置依賴注入-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.rwnh.cn/article18/ceedgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、Google定制網(wǎng)站、云服務(wù)器、商城網(wǎng)站響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
富阳市| 郎溪县| 徐闻县| 图们市| 开平市| 巴青县| 灵丘县| 夏津县| 报价| 科尔| 怀柔区| 竹山县| 庆城县| 三亚市| 容城县| 修水县| 南江县| 大宁县| 隆子县| 云南省| 安康市| 兴业县| 阿克苏市| 安福县| 疏勒县| 勃利县| 沽源县| 新乡县| 蕲春县| 沛县| 耒阳市| 隆化县| 肥城市| 昌平区| 吉木萨尔县| 福鼎市| 五家渠市| 广州市| 咸阳市| 曲麻莱县| 大同县|