C# 无法解析类型为';测试服务&x27;试图激活';测试控制器';

C# 无法解析类型为';测试服务&x27;试图激活';测试控制器';,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我的错误 InvalidOperationException:尝试激活“KTS.WEBAPI.Controllers.TestsController”时,无法解析类型“KTS.BLL.Interfaces.ITestService”的服务。 我有三层架构的应用程序。TestController位于API层中,ITestService和TestService位于BLL中 测试控制器 [ApiController] public class TestsController : Con

我的错误

InvalidOperationException:尝试激活“KTS.WEBAPI.Controllers.TestsController”时,无法解析类型“KTS.BLL.Interfaces.ITestService”的服务。

我有三层架构的应用程序。TestController位于API层中,ITestService和TestService位于BLL中

测试控制器

    [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());
        }
    }
[ApiController]
公共类TestsController:ControllerBase
{
专用只读ITestService(测试服务);
IMapper mapper=新的MapperConfiguration(cfg=>cfg.CreateMap()).CreateMapper();
公共测试控制器(ITestService testService)
{
_testService=testService;
}
//获取:api/测试
[HttpGet]
公共IEnumerable GetTests()
{
返回mapper.Map(_testService.GetAllTests());
}
}
测试服务

    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());
        }
    }

公共类测试服务:ITestService
{
IUnitOfWork数据库{get;set;}
IMapper mapper=新的MapperConfiguration(cfg=>cfg.CreateMap()).CreateMapper();
公共测试服务(IUnitOfWork uow)
{
数据库=uow;
}
公共IEnumerable GetAllTests()
{
返回mapper.Map(Database.Tests.GetAll());
}
}

我知道,有很多像我这样的话题,但它们对我没有帮助。我已尝试添加
服务。AddTransient()到我的Startup.cs,但它不起作用。

您是否在Startup.cs中注册了TestService之前的IUnitOfWork? 可能是这样


看看这篇文章。它看起来与您遇到的问题相似。

要解决此问题,我添加

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

要启动.cs

当我注册IUnitOfWork时,会出现新的错误:在尝试激活“KTS.DAL.Repositories.EFUnitOfWork”时,无法解析类型“KTS.DAL.EF.ApplicationContext”的服务。