この記事では、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
インターフェイス パラメーターを介してサービスを注入します。
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バージョンのダウンロード
以上が.NET 構成 JSON での依存関係注入メソッドの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。