Moss’s blog

すごくなるためのブログ

IoC-Container への挿入方法

  • Web APIチュートリアルを学習中に知ったことです。(間違っていたら指摘もらえると助かります。)

docs.microsoft.com

IoC Containerの大まかな理解。

  • 依存先を入れておくコンテナのイメージ。
  • そしてこのコンテナへ依存するオブジェクトを挿入する。(Dependency Injection)
  • アプリケーションはこのコンテナから挿入されているオブジェクトを参照することができる。

f:id:Moss7:20200126145629p:plain
イメージ

APS.NET Coreでは標準実装されている。

  • IoC-Containerを使いたい人はサードパーティー製のFrameworkを使ったりしていたよう。
  • しかし、APS.NET Coreでは標準実装。(自分は使ったことなかったのでありがたみがわかりません。。。)

具体的な挿入場所: ConfigureServices

  • ConfigureServicesのパラメータAddすることで、IoC-Containerへの挿入になる。
public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton<IGreeting, GoodEvening>(); 
       :
}
  • 挿入するインスタンスのクラスは以下のような定義にしています。
public interface IGreeting {
    string Greet();
}
    
public class GoodEvening : IGreeting
{
    public string Greet()
    {
        return "Good Evening!!";
    }
}

コンストラクタ引数で受け取れる

    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IGreeting _greet;

        public HomeController(ILogger<HomeController> logger, IGreeting greet)
        {
            _logger = logger;
            _greet = greet;
        }

もらったインスタンスを使う

public IActionResult Index()
{
    this.ViewBag.Greet = this._greet.Greet();
    return View();
}
@{
    ViewData["Title"] = this.ViewBag.Greet;
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

ブラウザ上に表示される

f:id:Moss7:20200125192754p:plain


  • 参照URL

ASP.NET CoreのDependency Injection 〜【その1】とりあえず使ってみよう 〜 | SIOS Tech. Lab Dependency Injection in ASP.NET Core