当我尝试访问控制器时出现依赖注入错误。错误是“尝试激活时无法解析IOrderPartRepository的服务。我遵循了教程中的示例,但是仍然不确定为什么它无法解决。我查看了类似的问题,但似乎我已将解决方案中类似问题的修正纳入其中
错误: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [3] 与{action =“ GetOrderParts”,controller =“ OrderPart”}匹配的路由。在控制器DatingApp.API.Controllers.UsersController(DatingApp.API)上使用签名System.Threading.Tasks.Task`1 [Microsoft.AspNetCore.Mvc.IActionResult] GetOrderParts(DatingApp.API.Helpers.UserParams)执行控制器动作。 信息:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] 在3.2277毫秒内执行操作DatingApp.API.Controllers.UsersController.GetOrderParts(DatingApp.API) 失败:Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [1] 执行请求时发生未处理的异常。 System.InvalidOperationException:尝试激活“ DatingApp.API.Controllers.OrderPartController”时,无法解析“ DatingApp.API.Data.IOrderPartRepository”类型的服务。
这是代码
public interface IOrderPartRepository
{
void Add<T>(T entity) where T: class;
void Delete<T>(T entity) where T: class;
Task<bool> SaveAll();
Task<PagedList<OrderPart>> GetOrderParts(UserParams userParams);
Task<OrderPart> GetOrderPart(int id);
}
public class OrderPartRepository: IOrderPartRepository
{
private readonly DataContext _context;
public OrderPartRepository(DataContext context)
{
_context = context;
}
public void Add<T>(T entity) where T : class
{
_context.Add(entity);
}
public void Delete<T>(T entity) where T : class
{
_context.Remove(entity);
}
public async Task<OrderPart> GetOrderPart(int id)
{
var orderPart = await _context.OrderParts.Include(p => p.Photos).FirstOrDefaultAsync(u => u.Id == id);
return orderPart;
}
public async Task<PagedList<OrderPart>> GetOrderParts(UserParams userParams)
{
var orderparts = _context.OrderParts.Include(p => p.Photos)
.OrderByDescending(u => u.Added).AsQueryable();
if (!string.IsNullOrEmpty(userParams.OrderBy))
{
switch (userParams.OrderBy)
{
case "created":
orderparts = orderparts.OrderByDescending(u => u.Added);
break;
default:
orderparts = orderparts.OrderByDescending(u => u.Added);
break;
}
}
return await PagedList<OrderPart>.CreateAsync(orderparts, userParams.PageNumber, userParams.PageSize);
}
public async Task<bool> SaveAll()
{
return await _context.SaveChangesAsync() > 0;
}
}
}
控制器
private readonly IOrderPartRepository _repo;
public OrderPartController(IOrderPartRepository repo)
{
this._repo = repo;
}
启动
services.AddScoped<IAuthRepository, AuthRepository>();
services.AddScoped<IDatingRepository, DatingRepository>();
services.AddScoped<IOrderPartRepository, OrderPartRepository>();
答案 0 :(得分:1)
您是否也在Startup
类中注册了数据库上下文?如果不是,那可能是问题的原因,请尝试以下方法:
services.AddDbContext<DataContext>(options => {
options.UseSqlServer("Connection string");
});