首页 > 解决方案 > 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>();

标签: c#dependency-injection.net-core

解决方案


您是否也在课堂上注册了您的数据库上下文Startup?如果不是,这可能是问题的原因,请尝试以下操作:

services.AddDbContext<DataContext>(options => {
    options.UseSqlServer("Connection string");
});

推荐阅读