当我通过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>();
}
答案 0 :(得分:4)
您似乎在Dashboard
和Startup
课程中引用了错误的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>();
}