1

В проекте ASP.NET Core 1.0, используя DI, как я могу передать параметры конструктору. Например, как зарегистрировать следующую службу в Startup.cs. services.AddTransient(typeof(IStateService), new StateService()); не работает, поскольку StateService() требует входного параметра типа BlogingContext. Или, есть ли альтернативный способ создания следующего сервиса с базой данных? Здесь State - это таблица из SQL Server Db. Приложение использует EntityFrameworkCore с подходом Code First. Я использую последнюю версию ASP.NET Core 1.0 и VS2015-Update 3, выпущенную 27 июня 2016 года.ASP.NET Core Dependency Injection, вводят параметры

Я вижу 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(); 
     } 
    } 
+0

Вы пробовали регистрировать 'BloggingContext' с чем-то вроде' services.AddDBContext (); 'при запуске? https://docs.asp.net/ru/latest/fundamentals/dependency-injection.html#registering-your-own-services – mollwe

+0

@mollwe Благодарим вас за помощь. Ваш код не будет регистрировать мою пользовательскую службу, т. Е. 'StateService' – nam

+0

Если вы зарегистрируете государственную службу как' service.AddTransient (); ', это заставит ее работать? – mollwe

ответ

1

В документации состояниях here (Прокрутка немного вниз), вы должны зарегистрировать IStateService и BloggingContext как:

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

Тогда DI рассосется дерево всех зависимостей вы. Обратите внимание, что вы должны использовать срок действия службы на службе, потому что служба должна использовать тот же срок службы, что и DbContext, и использует область действия.

Смежные вопросы