aspnet核心无法解析依赖项:错误:“尝试激活时无法解析类型的服务”

时间:2019-08-27 17:49:44

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

当我尝试访问控制器时出现依赖注入错误。错误是“尝试激活时无法解析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>();

1 个答案:

答案 0 :(得分:1)

您是否也在Startup类中注册了数据库上下文?如果不是,那可能是问题的原因,请尝试以下方法:

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