提问者:小点点

依赖注入错误尝试激活时无法解析类型服务


当我尝试通过Postman发布数据时,我得到了依赖注入错误。

这是控制器和服务文件中的代码。

仪表板控制器. cs

using AutoMapper;
using System.Threading.Tasks;

namespace Web.API.Controllers
{
    [Route("api/dashboards")]
    public class DashboardController : Controller
    {
        private readonly IDashboardService dashboardService;

        public DashboardController(IDashboardService dashboardService)
        {
            this.dashboardService = dashboardService;
        }

        /// <summary>
        /// Describe this method here.
        /// </summary>
        [HttpPost]
        public async Task<IActionResult> CreateDashboard([FromBody]Dashboard dashboardResource)
        {
            try
            {
                if (!ModelState.IsValid)
                    return BadRequest(ModelState);

                var createdDashboard = await dashboardService.Create(dashboardResource);
                return Ok(createdDashboard);
            }
            catch (Exception)
            {
                return BadRequest();
            }
        }
    }
}

仪表板服务

using System.Threading.Tasks;

namespace Domain.Services
{
    public class DashboardService: IDashboardService
    {
        private readonly IRepository<Dashboard> dashboardRepository;

        public DashboardService(IRepository<Dashboard> dashboardRepository)
        {
            this.dashboardRepository = dashboardRepository;
        }

        public async Task<Dashboard> Create(Dashboard dashboard)
        {
            var createdDashboard = await dashboardRepository.Create(dashboard);
            return createdDashboard;
        }
    }
}

在启动方法配置服务中,我添加了AddScoped

启动. cs

public void ConfigureServices(IServiceCollection services)
            {
                services.AddAutoMapper();

                services.AddScoped<IDashboardService, DashboardService>();
                services.AddScoped<IRepository<Dashboard>, DashboardRepository>();

                services.AddDbContext<DbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));

                services.AddMvc();

                services.AddTransient<DatabaseDeployer>();
            }

我不确定我做错了什么。我使用N-层结构与存储库,自动程序等。

仪表板存储库. cs

using AutoMapper;

namespace Repositories.Repositories
{
    public class DashboardRepository : IRepository<domain.Dashboard>
    {
        private readonly DbContext context;
        private readonly IMapper mapper;

        public DashboardRepository(DbContext context, IMapper mapper)
        {
            this.context = context;
            this.mapper = mapper;
        }

        public async Task<domain.Dashboard> Create(domain.Dashboard dashboard)
        {
            var entityToCreate = mapper.Map<domain.Dashboard, dbModels.Dashboard>(dashboard);

            var createdEntity = context.Add(entityToCreate);
            await context.SaveChangesAsync();

            var createDashboard = mapper.Map<dbModels.Dashboard, domain.Dashboard>(dashboard); 
        }

共2个答案

匿名用户

看起来您在StartupDashboardRepository类中引用了不正确的Dashboard

仪表板存储库. cs

public class DashboardRepository : IRepository<Domain.Entities.Dashboard.Dashboard> 

启动. cs

services.AddScoped<IRepository<Domain.Entities.Dashboard.Dashboard>, DashboardRepository>();

查看DashboardRepository类,您已经定义了

using domain = Domain.Entities;

但是直接使用Dashboard

public class DashboardRepository : IRepository<Dashboard>

而不是

public class DashboardRepository : IRepository<domain.Dashboard>

因此,Dashboard指的是Repositories. Models.Dashboard,因为您添加了以下使用语句

using Repositories.Models;

匿名用户

就我而言,我忘记在启动. cs中注入依赖项

Public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<ISyncRequestRepository, SyncRequestManager>();     
}