Есть ли хороший способ внедрения имитируемых репозиториев с использованием платформы .NET DI?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Есть ли хороший способ внедрения имитируемых репозиториев с использованием платформы .NET DI?

Сообщение Гость »


У меня есть следующий общий репозиторий:

публичный интерфейс IRepository где T: BaseEntity { IMongoQueryable Entities {get; } Task AddAsync (объект T, параметры InsertOneOptions?, CancellationToken cancelToken = default); //... } Используя подход .NET DI, я могу динамически внедрить свой репозиторий в свой контейнер и с легкостью использовать его:

serviceCollection.AddScoped(typeof(Repository), typeof(IRepository)); Это прекрасно работает. Тем не менее, я пытаюсь найти хороший подход к использованию имитируемых репозиториев в своих тестовых примерах. Например, в моих тестовых сценариях есть поставщик услуг, где я могу воспользоваться внедрением зависимостей для получения экземпляров объектов. например:

публичный класс UserService: IUserService { частный IMapper _mapper; частный IRepository _userRepository; частный ValidatorService _userInputValidator; public UserService (сопоставитель IMapper, IRepository userRepository, ValidatorService userInputValidator) { (_mapper, _userRepository, _userInputValidator) = (mapper, userRepository, userInputValidator); } } //... _userService = ServiceProvider.GetRequiredService(); Это тоже работает: я получаю подходящий экземпляр своего класса обслуживания и могу его протестировать. Но в моих тестовых примерах мне бы хотелось избегать этого каждый раз:

_mapper = ServiceProvider.GetRequiredService(); // \/ здесь _userRepositoryMock = новый Mock(); _userInputValidator = ServiceProvider.GetRequiredService(); _userService = новый UserService(_mapper, _userRepositoryMock.Object, _userInputValidator); Вместо того, чтобы создавать макет вручную, я бы хотел использовать DI для определения объема имитируемого репозитория, и всякий раз, когда я запрашиваю свой userService из определенного контейнера, я получаю макетную версию, а не «исходную» реализацию». Что-то вроде :

serviceCollection.AddScoped(typeof(IRepository), new Mock()); Вы уже добились этого/знаете ли вы, как/верите, что это возможно?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»