依存性注入
Decouple hard-coded dependencies in your code using dependency injection for easier unit testing.
読み終わるまでの所要時間 1 分最終更新 23日前
Cloud Code には依存性注入 (DI) のサポートがあります。これにより、コード内でハードコードされた依存関係を分離し、単体テストを簡単にすることができます。ここでの DI は、.Net によって作成される類似のシステムに基づいています。 Cloud Code は、以下の依存関係タイプのサポートを提供します。
- シングルトン: シングルトン依存関係は、1 回作成されてから、必要に応じて挿入されます。
- スコープ付き: スコープ付き依存関係は、リクエストごとに 1 回作成されます。コンストラクタで使用するかメソッドで使用するかは問題ではありません。どちらも同じオブジェクトにリンクするからです。
- 一時的: 一時的依存関係は、リクエストされるたびに作成されます。コンストラクタで一時的依存関係をリクエストし、メソッドでもう一度リクエストする場合、この 2 つのリクエストは 2 つの別々のインスタンスです。
依存性注入の設定
依存関係を設定するには、ICloudCodeSetupAddScopedAddTransientメモ:using Unity.Services.CloudCode.Core;namespace ExampleModule;public interface IRandomNumber{ public int GetRandomNumber();}public class LockedRandomNumber : IRandomNumber{ private int randomNumber; public LockedRandomNumber() { randomNumber = Random.Shared.Next(); } public int GetRandomNumber() { return randomNumber; }}public class ModuleConfig : ICloudCodeSetup{ public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton<IRandomNumber, LockedRandomNumber>(); }}
- シングルトンは、乱数を 1 回生成し、サービスがライブである限りそれを保持します。
- スコープ付きでは、リクエストごとに新しいインスタンスが作成されますが、どこでリクエストするかにかかわらず、そのリクエストに対する数値は同じままです。
- 一時的では、1 回リクエストするたびに新しいインスタンスが作成されるため、毎回乱数が返されます。
依存性注入の使用方法
依存性注入をサポートするには、以下の例で示すように、メソッドにCloudCodeFunctionusing Unity.Services.CloudCode.Core;namespace ExampleModule;public struct DependencyInjectionResult{ public int ConstructorNumber; public int MethodNumber;}public class TestDependencyInjection{ private int number; public TestDependencyInjection(IRandomNumber randomNumber) { number = randomNumber.GetRandomNumber(); } [CloudCodeFunction("TestInjection")] public DependencyInjectionResult TestInjection(IRandomNumber randomNumber) { return new DependencyInjectionResult { // Will always return the same number during the session ConstructorNumber = number, MethodNumber = randomNumber.GetRandomNumber(), }; }}
依存性注入の使用方法 については、Microsoft のドキュメントを参照してください。