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

时间:2018-03-28 13:34:11

标签: c# .net-core

当我通过Postman尝试POST数据时,我得到了Dependency Injection Eror。

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

DashboardController.cs

<div class="container">
  <div class="cell-1">A</div>
  <div class="cell-2">B</div>
  <div class="cell-3">C long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long</div>
  <div class="cell-4">D</div>
</div>

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

在启动方法ConfigureServices中,我添加了AddScoped

Startup.cs

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

我不确定我做错了什么。我使用N层架构与存储库,自动装置等。

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

2 个答案:

答案 0 :(得分:4)

您似乎在DashboardStartup课程中引用了错误的DashboardRepository

DashboardRepository.cs

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

Startup.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;

答案 1 :(得分:0)

就我而言,我忘了在startup.cs中注入Dependecny

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