2017-02-22 11 views
0

В ASP.NET Core 1.0 я пытаюсь ввести в BaseRepository constuctor два параметра. Один из них - SwitchContext (зарегистрированный ниже и настраиваемый параметр - RepositoryCacheMode (просто перечисление))Инъекция зависимостей ядра ASP.NET с необязательными параметрами

У меня есть способ зарегистрировать параметр вроде этого?

services.AddTransient<RepositoryCacheMode, RepositoryCacheMode.None>(); 

или как получить экземпляр SwitchContext для регистрации BaseRepository?

public static void AddDependency(this IServiceCollection services) 
     {     
      services.AddTransient<SwitchContext, SwitchContext>(); 
      services.AddTransient<IRepository, BaseRepository>(t => new BaseRepository(// How to get instanse of SwitchContext ? // , RepositoryCacheMode.None)); 

Конструктор BaseRepository:

public BaseRepository(SwitchContext context, RepositoryCacheMode cacheMode = RepositoryCacheMode.FirstLevel) 
     { 
      Context = context; 
      _cacheMode = cacheMode; 
     } 
+0

Я флажком, как дубликат, потому что он выглядит почти точно такой же вопрос. Единственное различие заключается в том, что вы используете значения по умолчанию, и он хочет иметь значение по умолчанию null. в обоих случаях это не работает, и объясняется там почему. –

ответ

1

t является ServiceProvider, так что вы можете просто сделать:

services.AddTransient<IRepository, BaseRepository>(
    serviceProvider => new BaseRepository(serviceProvider.GetService<SwitchContext>()) 
); 
+1

ну, это работает для меня, но я не смог найти метод Resolve, и я использовал (r => r. GetService ()) –

+0

@ Ilya.Sulimanov ah да извините, я привык к старому контейнеру Unity. я изменил ответ –