ASP.NET核心依赖注入,注入参数

时间:2016-07-03 23:21:44

标签: c# asp.net-core visual-studio-2015 dependency-injection entity-framework-core

在ASP.NET Core 1.0项目中,使用DI如何将参数传递给构造函数。例如,如何在Startup.cs中注册以下服务。 services.AddTransient(typeof(IStateService), new StateService());不起作用,因为StateService()需要一个类型为BlogingContext的输入参数。或者,是否存在使用数据库构建以下服务的替代方法?这里State是来自SQL Server Db的表。应用程序正在使用EntityFrameworkCore使用Code First方法。我正在使用2016年6月27日发布的最新版本的ASP.NET Core 1.0和VS2015-Update 3

我看到similar example here但输入参数类型不同。

服务

    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();
         }
     }

1 个答案:

答案 0 :(得分:2)

由于文档说明here(向下滚动),您应该注册IStateServiceBloggingContext,如:

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

然后DI将为您解析整个依赖关系树。请注意,您应该在服务上使用作用域生存期,因为该服务应使用与DbContext相同的生命周期,并且它使用作用域。