c# - aspnet 核心无法解决依赖关系:错误:“尝试激活时无法解析服务类型”
问题描述
当我尝试访问我的控制器时出现依赖注入错误。错误是“尝试激活时无法解析 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.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>();
解决方案
您是否也在课堂上注册了您的数据库上下文Startup
?如果不是,这可能是问题的原因,请尝试以下操作:
services.AddDbContext<DataContext>(options => {
options.UseSqlServer("Connection string");
});
推荐阅读
- html - Jmeter - 是否值得对启用了嵌入式资源的页面进行性能测试
- django - Django:我无法在 django admin 中删除用户
- html - 怎么写 '' 作为 HTML 中的字符串?
- android - 从网页打开活动
- android - 如何通过 XML 使用数据绑定来更改使用 TabLayoutMediator 配置的选项卡文本?
- python - sqlite.OperationalError:靠近“。”:语法错误
- java - 如何编写涉及一个对象和另一个不同类的相关对象的条件查询?
- html - 在部分内垂直居中旋转木马
- ios - 框架内的 NSLocalizedString 从外部包获取值
- mysql - 加入 2 个表,使用过滤器和排序依据