Могу ли я предоставить .NET Core DependencyInjection с «решателем» для возврата Moq любого сервиса, который не зарегистрирован? - PullRequest
0 голосов
/ 09 мая 2019

Учитывая класс с зависимостью:

class SomeService : ISomeService { ctor(ISomeDependency someDependency ... }

Используя Moq, я могу смоделировать зависимость следующим образом:

var services = new ServiceCollection()
.AddTransient(_ => Mock.Of<ISomeDependency>())
.AddTransient<ISomeService,SomeService>()
.BuildServiceProvider();

services.GetRequiredService<ISomeService>(); 

Могу ли я в любом случае зарегистрировать "провайдера", который ServiceProvider будет использовать, если реализация не зарегистрирована? Я бы хотел, чтобы ServiceProvider возвращал Mock.Of<T>, если зависимость T не была зарегистрирована.

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

1 Ответ

2 голосов
/ 10 мая 2019

Могу ли я в любом случае зарегистрировать «провайдера», который ServiceProvider будет использовать, если реализация не зарегистрирована?

С Microsoft.Extensions.DependencyInjection (MS.DI) нет способа сделать это.То, что вы ищете, это незарегистрированное разрешение типа .Большинство зрелых DI-контейнеров на самом деле содержат перехватчики, которые позволяют перехватывать вызовы из библиотеки при запросе незарегистрированного типа.Но MS.DI, однако, не имеет такой функции.Все регистрации должны быть сделаны в явном виде, и нет никакого способа обойти.

...