在ASP.NET Core 1.0項目中,使用DI如何將參數傳遞給構造函數。例如,如何在Startup.cs中註冊以下服務。 services.AddTransient(typeof(IStateService), new StateService());因為StateService()需要一個類型為BlogingContext的輸入參數,所以不起作用。或者,是否存在使用數據庫構建以下服務的替代方法?這裡State是從SQL Server數據庫來的表。應用程序正在使用EntityFrameworkCore與Code First方法。我正在使用2016年6月27日發布的最新版本的ASP.NET Core 1.0和VS2015-Update 3

在這裡看到了一個類似的例子,但輸入參數的類型並不完全相同。

服務

    public interface IStateService
    {
        IEnumerable<State> List();
    }

     public class StateService : IStateService
     {
         private BloggingContext _context;

         public StateService(BloggingContext context)
         {
             _context = context;
         }

         public IEnumerable<State> List()
         {
             return _context.States.ToList();
         }
     }

一般承認的答案

正如文件指出這裡 (滾動了一下下),你應該註冊IStateServiceBloggingContext這樣的:

services.AddDbContext<BloggingContext>();
services.AddScoped<IStateService, StateService>();

然後DI將為您解析整個依賴關係樹。請注意,您應該在服務上使用作用域生存期,因為該服務應使用與DbContext相同的生命週期,並且它使用作用域。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因