Я пытаюсь научиться внедрять зависимости и столкнулся с проблемой при модульном тестировании приложения.
Я пишу консольное приложение, и контейнер создается и инициализируется в Main (), он доступен как get-property
в Program.Container
, поэтому в любом месте моего приложения я могу вызвать Program.Container.Resolve<..>()
.
У меня есть класс ServiceValidator, такой как:
public class ServiceValidator
{
private readonly IConfiguration _configuration;
private readonly IService _service;
public ServiceValidator(IConfiguration configuration, IService service)
{
_configuration = configuration;
_service = service;
}
В другом классе я использую
ServiceValidator serviceValidator = Program.Container.Resolve<ServiceValidator>();
serviceValidator.VerifyVersion();
Это вызов Program.Container.Resolve
, который вызывает у меня проблемы в модульном тесте, так как он не был настроен.
Это плохая практика, вызывать решимость на контейнере? Я мог бы создать экземпляр ServiceValidator в Main()
и передать объект, но это кажется глупым, поскольку это вызвало бы множество параметров для объектов, которые просто передаются следующему методу.
Так что, я думаю, допустимо вызывать Resolve внутри класса, но тогда контейнер должен быть настроен для модульного теста. Как мне это сделать, я должен переместить контейнер в другое место, чем класс Program? Что бы вы порекомендовали?
Если это имеет значение, я использую Unity и C #
Спасибо: -)