Не удалось разрешить службу для типа «TestService» при попытке активировать «TestsController» - PullRequest
0 голосов
/ 19 апреля 2020

Моя ошибка

InvalidOperationException: Unable to resolve service for type 'KTS.BLL.Interfaces.ITestService' while attempting to activate 'KTS.WEBAPI.Controllers.TestsController'.

У меня есть приложение с 3-х уровневой архитектурой. TestController находится на уровне API, ITestService и TestService находятся в BLL.

TestController

    [ApiController]
    public class TestsController : ControllerBase
    {
        private readonly ITestService _testService;

        IMapper mapper = new MapperConfiguration(cfg => cfg.CreateMap<TestDTO, TestModel>()).CreateMapper();
        public TestsController(ITestService testService)
        {
            _testService = testService;
        }

        // GET: api/Tests
        [HttpGet]
        public IEnumerable<TestModel> GetTests()
        {
            return mapper.Map<IEnumerable<TestDTO>, IEnumerable<TestModel>>(_testService.GetAllTests());
        }
    }

TestService

    public class TestService : ITestService
    {
        IUnitOfWork Database { get; set; }

        IMapper mapper = new MapperConfiguration(cfg => cfg.CreateMap<Test, TestDTO>()).CreateMapper();
        public TestService(IUnitOfWork uow)
        {
            Database = uow;
        }

        public IEnumerable<TestDTO> GetAllTests()
        {
            return mapper.Map<IEnumerable<Test>, List<TestDTO>>(Database.Tests.GetAll());
        }
    }

Я знаю, что существует множество тем как мой, но они не помогают мне. Я пытался добавить services.AddTransient<ITestService, TestService>(); в мой файл Startup.cs, но он не работает.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Вы зарегистрировали IUnitOfWork перед TestService в файле startup.cs? Это может быть случай.

Проверьте Ответ hsop на этот пост. Это похоже на проблему, с которой вы столкнулись.

0 голосов
/ 19 апреля 2020

Чтобы решить эту проблему, я добавляю

            services.AddDbContext<ApplicationContext>();
            services.AddTransient<IUnitOfWork, EFUnitOfWork>();
            services.AddTransient<ITestService, TestService>();

в Startup.cs

...