首页 > 解决方案 > InvalidOperationException:无法解析服务

问题描述

首先抱歉,如果我的英语不够好 XD。其次,我在 ASP.NET Core 2.0 上编程。当我启动我的 web 应用程序时,当我尝试转到我的应用程序的“分类”网页时,我得到了下一个错误。

InvalidOperationException:尝试激活“EduCloud.Controllers.UnitsController”时无法解析“EduCloud.Data.IClassInfo”类型的服务。

首先,对不起,如果代码太多。模型涉及的代码是

using System;
using System.Collections.Generic;
using System.Text;

namespace EduCloud.Data.Models
{
    public class ClassInfo
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string ClassVideoUrl { get; set; }
        public string ClassHomeworkUrl { get; set; }
        public string TestUrl { get; set; }

        public virtual ApplicationUser User { get; set; }
        public virtual Forum Forum { get; set; }
    }
}

该模型与类有 1 级抽象

using EduCloud.Data.Models;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace EduCloud.Data
{
    public interface IClassInfo
    {
        ClassInfo GetById(int id);
        IEnumerable<ClassInfo> GetAll();
        IEnumerable<ClassInfo> GetFilteredClasses(Forum forum, string searchQuery);
        IEnumerable<ClassInfo> GetFilteredClasses(string searchQuery);
        IEnumerable<ClassInfo> GetClassesByForum(int id);

        Task Add(ClassInfo classInfo);
        Task Delete(int id);
        Task EditClassContent(int id, string newContent);
    }
}

接下来,这个IClass的方法在下一个类中

using EduCloud.Data;
using EduCloud.Data.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EduCloud.Service
{
    public class ApplicationClassService : IUnit
    {
        private readonly ApplicationDbContext _context;

        public ApplicationClassService(ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task Create(ClassInfo classInfo)
        {
            _context.Add(classInfo);
            await _context.SaveChangesAsync();
        }

        public Task Delete(int classId)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<Forum> GetAll()
        {
            return _context.Forums
                .Include(forum => forum.Classes);
        }

        public Forum GetById(int id)
        {
            var forum = _context.Forums.Where(f => f.Id == id)
                .Include(f => f.Classes ).ThenInclude(p => p.User)
                //.Include(f => f.Classes).ThenInclude(p => p.Replies).ThenInclude(r => r.User)
                .FirstOrDefault();

            return forum;
        }

        public Task UpdateForumTitle(int classId, string newTitle)
        {
            throw new NotImplementedException();
        }
    }
}

最后是控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EduCloud.Data;
using EduCloud.Data.Models;
using EduCloud.Models.Classes;
using EduCloud.Models.Units;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;


namespace EduCloud.Controllers
{
    public class UnitsController : Controller
    {
        private readonly IUnit _unitService;
        private readonly IForum _forumService;
        private readonly IClassInfo _classService;

        public UnitsController(IUnit unitService, IForum forumService, IClassInfo classService)
        {
            _unitService = unitService;
            _forumService = forumService;
            _classService = classService;
        }

        public IActionResult Index()
        {
            var units = _unitService.GetAll()
                .Select(forum => new UnitsListingModel
                {
                    Id = forum.Id,
                    Name = forum.Title,
                });

            var model = new UnitsIndexModel
            {
                UnitList = units
            };

            return View(model);

        }

    }
}

以及当我转到“分类”链接时尝试运行的视图代码

@model EduCloud.Models.Units.UnitsIndexModel

<h1>Unidades de Aprendizaje</h1>

<table class="table table-hover" id="forumIndexTable">
    <tbody>
        @foreach (var forum in Model.UnitList)
        {
            <tr>
                <td>
                    <a asp-controller="Units" asp-action="ClassesList" asp-route-id="@forum.Id">
                        @forum.Name
                    </a>
                </td>
            </tr>
        }
    </tbody>
</table>

标签: c#asp.net-coreasp.net-web-apimodel-view-controllerasp.net-core-mvc

解决方案


推荐阅读