簡體   English   中英

傳遞Controller構造函數中的接口或類以進行依賴項注入

[英]Pass Interface or Class in Controller Constructor for dependency injection

我的控制器看起來像波紋管。 但是我不知道何時傳遞接口,何時傳遞構造函數中的類。 還是真的重要嗎? 我搜索但沒有得到答案。

public class MyController
    {
      private readonly IMyService _myService;
      public MyController(IMyService myService)
      {
        _myService=myService;
      }
    }

要么

public class MyController
    {
      private readonly IMyService _myService;
      public MyController(MyService myService)
      {
        _myService=myService;
      }
    }

我的依賴注入就像

    builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();
public class MyController
    {
      private readonly IMyService _myService;
      public MyController(IMyService myService)
      {
        _myService=myService;
      }
    }

更好,因為它允許您以其他方式實現IMyService,而無需接觸MyController。

您始終需要在構造函數中傳遞接口(您的第一個實現)。 如果您將在構造函數中傳遞類,那么依賴注入沒有任何好處,因為您已經在告訴構造函數哪個類正在實現此接口和此代碼行

 builder.RegisterType<MyService>().As<IMyService>().InstancePerLifetimeScope();

依賴注入是一種用於在運行時而不是編譯時綁定接口及其實現的東西。

PS:始終使用第一個實現。 由於是廣義概念,因此我無法在此處解釋所有內容(嘗試在網絡上搜索)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM