Я бы сказал, что нет. Опять же, я не большой поклонник единицы работы - я чувствую, что она знает слишком много. Я бы передал необходимый репозиторий (-ы) в созданный вами сервис. Как правило, я получаю специальный «GetService» или «CreateService», но это может сработать для вас ... (я пишу это от руки, поэтому он может не собираться)
Public class DoSomethingCoolService : IDoSomethingCoolService
{
private IRepository<SomethingINeed> _neededRepository;
public DoSomethingCoolService(connectionOrContext)
{
//setup
}
public DoSomethingCoolService(IRepository<SomethingINeed> neededRepository)
{
_neededRepository = neededRepository;
}
public List<SomethingINeed> ReturnWhatIWant()
{
_neededRepository.Where(x => x.WhatIWant = true);
}
}
Лично мне это не нравится. Я предпочитаю что-то более подобное ...
public interface IGetService<T>
{
//usual get suspects here
}
public class GetService<T> : IGetService<T>
{
private IRepository<T> _repository;
GetService(IRepository<T> repository)
//use repository to call gets
}
теперь для сложных вещей ...
public interface IGetClientService : IGetService<Client>
{
List<Client> GetClientsForSomething(int someId);
}
public class GetClientService : GetService<Client>, IGetClientService
{
private IRepository<Client> _repository;
GetClientService(IRepository<Client> repository) : base(repository)
public List<Client> GetClientsForSomething(int someId)
{
//some crazy cool business logic stuff here you want to test!
}
}
Тогда внутри моего контроллера у меня просто есть зависимость от IGetClientService, и я использую его при необходимости. Легко тестировать, легко создавать другой, не зависящий от него.
Имеет ли это какой-то смысл?