Разрешить IOptions<T> в модульном тесте
У меня есть такой класс:
public class Test : ITest
{
public Test(IOptions<CustomSection> settings)
{
//do something
}
}
Я хотел бы провести модульное тестирование и просто поддерживать внедрение зависимостей. Поэтому для достижения этой цели я попытался сделать следующее:
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.AddEnvironmentVariables();
var configurationRoot = builder.Build();
//This is a method that injects various services.
var services = InjectServices();
services.AddSingleton<IConfiguration>(configurationRoot);
var provider = services.BuildServiceProvider();
var my service = provider.GetService<ITest>();
Однако я получаю следующую ошибку:
Не удалось разрешить тип сервопривода "Microsoft.Extensions.Options.IOptions`1[Test]" при попытке активировать "Test".
Как я могу добавить IOptions для инъекций? я думал так services.AddSingleton<IConfiguration>(configurationRoot);
сделал бы трюк, но это не похоже. Кроме того, моя конфигурация верна, если я использую те же самые настройки приложений в своем основном проекте, проблем нет.
1 ответ
Вы забыли зарегистрировать услуги, необходимые для использования опций:
// extension method defined in Microsoft.Extensions.Options
services.AddOptions();
Кроме того, вы должны настроить, как построить CustomSection
из конфигурации что-то вроде этого:
services.Configure<CustomSection>(configurationRoot);
Ссылочная конфигурация в ASP.NET Core
Шаблон параметров ссылок в ASP.NET Core