ASP.NET Core 簡単なDIを実装する
- 作成日 2021.09.13
- ASP.NET Core
- ASP.NET
ASP.NET Coreで、簡単なDIを実装するまでの手順を記述してます。
環境
- OS windows10 pro 64bit
- VSCODE 1.56.2
- .NET Core 3.1.409
Services作成
DIするインターフェイスをまずは作成します。
Servicesフォルダを作成して、以下の内容で「ITestService.cs」を作成します。
namespace Test.Services
{
public interface ITestService{
public string Hello();
}
}
同様にインターフェイスを実装した「Services」配下に「TestService.cs」を作成します。
namespace Test.Services
{
public class TestService : ITestService
{
private int i = 0;
public string Hello(){
i++;
return i + "回実行されました";
}
}
}
Startup.cs編集
Startup.csの、DIの設定を行うConfigureServicesに以下を追加します。
※ここでは「DIされたら停止時まで、インスタンスが利用される(services.AddSingleton)」を使用してます。
// 追加
using Test.Services;
public void ConfigureServices(IServiceCollection services)
{
// 追加
services.AddSingleton<ITestService, TestService>();
}
Controller編集
適当なControllerに以下を追加して利用します。
using Test.Services; //追加
namespace Book.Controllers
{
private ITestService testservice;
[Route("api/[controller]")]
[ApiController]
public class BookController : ControllerBase
{
// 追加
private ITestService testservice;
// 追加
public BookController(ITestService testservice)
{
this.testservice = testservice;
}
}
}
後は、以下のように適当なメソッド内で利用すれば、httpリクエストごとにHelloが実行され、カウントが増えていくと思います。
Console.WriteLine(testservice.Hello());
servicesを、AddSingletonではなく
「DIごとにインスタンスが生成される」AddTransientか、
「httpリクエストごとにインスタンスが生成される」AddScopedだと、
毎回インスタンスが生成されるので「i」の値は常に「1」となります。
services.AddTransient<ITestService, TestService>();
services.AddScoped<ITestService, TestService>();
-
前の記事
C# 配列やリストをDictionaryに変換する 2021.09.13
-
次の記事
php 指定した範囲の値を置換する 2021.09.13
コメントを書く