ホームページ  >  記事  >  バックエンド開発  >  .NET 構成 JSON での依存関係注入メソッドの概要

.NET 構成 JSON での依存関係注入メソッドの概要

Y2J
Y2Jオリジナル
2017-05-13 11:28:131873ブラウズ

この記事では、JSON ファイルでの依存関係の挿入を構成する ASP.NET Core の詳細な説明を主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターに従って見てみましょう

前書き

前回の記事では、MVCでグローバルルーティングプレフィックスを設定する方法について書きました。 json ファイル。

以前の ASP.NET 4+ (MVC、Web Api、Owin、SingalR など) では、サードパーティの依存関係挿入コンポーネント (Autofac を使用したものなど) を使用するために独自の インターフェイス が提供されていました。 Untiy、String.Net など、これらのサードパーティの依存関係注入コンポーネントは、基本的に、クラスに直接設定するだけでなく、一連の設定注入または設定 lifecycle メソッドも提供します。 、または json などを使用すると、新しい ASP.NET Core では、Microsoft がデフォルトで依存関係注入機能を提供してくれたので、依存関係注入を実装するためにサードパーティのコンポーネントに依存する必要がなくなりました。 設定ファイルで依存関係の注入を設定するには、Microsoft 独自の DI コンポーネントは設定ファイルを提供しないため、この設定項目の機能を自分で実装する必要があります。個人的には、主な使用シナリオは、コンパイル時に実装を決定できず、実装を動的に変更する必要がある場所だと感じています。 これを行う方法を見てみましょう。

はじめに

まず、アプリケーションで DI 用のインターフェースを作成します:


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

次に、IFoo インターフェース Foo

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

次に、上記の IFoo インターフェイスとその実装を Startup.cs ファイルの ConfigureServices メソッドに追加する必要があります。ConfigureServices は主に構成依存関係挿入サービスに使用されます。次に、このメソッドによって提供される ISerciceCollection インターフェイス パラメーターを介してサービスを注入します。


rrreeeここでは、IServiceCollection の Add メソッドを使用して、一時的なライフ サイクルを持つ IFoo の実装を追加します。一時的とは、要求されるたびに Foo のインスタンスが作成されることを意味します。

上記は、依存関係注入を追加するために Microsoft が提供するデフォルトの方法です。json ファイルを使用する必要がある方法に変換する方法を見てみましょう。


DI を構成するために json ファイルを使用する

json ファイルを使用して依存関係注入を構成する場合、新しい json ファイルを作成するか、appsettings.json ファイルを直接使用するかを選択できます。次に、DI 構成を appsettings.json ファイルに直接追加します。

appsettings.json

🎜🎜rrreee🎜 まず、配列🎜 ノードを追加します。配列には 1 つのノードが含まれますまたはそれ以上の オブジェクト 🎜、serviceType サービス インターフェイスのタイプ、実装を表します。 implementationType インターフェイス、および lifetime 初期化インスタンスのライフ サイクル。 🎜🎜🎜注🎜: 構成ファイル内のタイプは完全名である必要があります。つまり、 が含まれている必要があります。ネームスペース🎜。 🎜🎜次に、Json ファイル構成項目に対応するサービス クラスを追加します。ここでは Newtonsoft JSON ライブラリを使用する必要があります。 🎜🎜🎜🎜🎜rrreee🎜次に、 ConfigureServices 設定の json ファイルを読み込みます 🎜。 🎜🎜🎜🎜🎜rrreee🎜 次に、利用可能かどうかをテストします。 🎜🎜🎜テスト🎜🎜🎜 HomeController.cs を開き、インジェクション項目を追加します: 🎜🎜🎜🎜🎜rrreee🎜 HomeController の 🎜コンストラクター🎜 に IFoo インターフェースを追加し、それを About のアクションで使用します。 🎜🎜プログラムを実行し、ページを開き、[概要]タブをクリックします🎜🎜🎜🎜🎜🎜🎜概要🎜🎜

上記は、ASP.NET Core で json ファイルへの依存関係の挿入を構成する方法です。これは単なる例であり、運用環境では使用しないでください。実際のプロジェクトでは、設定読み込み時の例外やサービスの有無、ライフサイクルなどの問題にも対処する必要があります。

【関連推奨事項】

1. 特別な推奨事項: 「php Programmer Toolbox」V0.1バージョンのダウンロード

2. ASPの無料ビデオチュートリアル

3. Li Yanhui ASPの基本ビデオチュートリアル。

以上が.NET 構成 JSON での依存関係注入メソッドの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。