.Net Core Dependency Injection - заменить зависимость в дочерней области - PullRequest
0 голосов
/ 11 октября 2019

Я использую по умолчанию .Net Core DI (Microsoft.Extensions.DependencyInjection). Мне нужно разрешить службу, заменив определенную зависимость другим экземпляром. В моем случае это соединение БД, поэтому это не зависимость первого уровня. На данный момент единственное работающее решение, которое я нашел, - это создание нового поставщика услуг с нуля, но это выглядит для меня огромными накладными расходами. Есть ли способ наследовать существующую конфигурацию, заменяя единственную реализацию интерфейса? Интерфейсы IServiceProvider и IServiceScopeFactory не имеют методов для изменения чего-либо.

1 Ответ

1 голос
/ 11 октября 2019

Да, вы можете подключить Autofac и затем делать то, что вы хотите.

Тогда вместо внедрения экземпляра IServiceProvider вы можете ввести ILifetimeScope.

Это позволит вам запустить область и заменить реализацию только для этой области, не затрагивая ничего.

using (var scope = _lifetimeScope.BeginScope(builder => builder.Register(_ => new MyClassThatRequiresAConnection(myConnectionString))))
{
  // this would resolve the latest registration of the class `MyClassThatRequiresAConnection`
   var myClass = scope.Resolve<MyClassThatRequiresAConnection>();
  // more code here ...
}
...