当我尝试通过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);
}
看起来您在Startup
和DashboardRepository
类中引用了不正确的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>();
}