控制器引发我无法捕获的错误(MVC5,C#,EF6)

时间:2018-07-31 11:40:03

标签: c# model-view-controller constructor controller

我已经接管了一个用EF6和MVC编写的项目,我都不熟悉。我已经设法完成了大部分工作,但是我需要创建一个新的数据表/实体/服务/ dto /控制器和视图。同样,大多数情况似乎都可以,但是控制器无法正常工作,我也无法确定如何捕获出现错误或问题所在的位置。

基本情况是控制器具有默认操作,该操作将返回一个简单的字符串(稍后将返回页面,但是我一直在切出不必要的位以标识问题出在哪里)。控制器的构造函数有两个参数,我知道它们是通过依赖项注入工厂传递给构造函数的-这个项目正在使用Ninject。

这是服务代码:

public class NewThingService
{
    private readonly IRepository<NewThing> repoNewThing;

    public NewThingService(IRepository<NewThing> _repoNewThing)
    {
        this.repoNewThing = _repoNewThing;
    }

    public void Save(NewThing entity)
    {
        if (entity.Id == 0)
        {
            repoNewThing.Insert(entity);
        }
        else
        {
            repoNewThing.Update(entity);
        }
    }

    public void Delete(int id)
    {
        repoNewThing.Delete(id);
    }

    public void Dispose()
    {
        if (repoNewThing != null)
        {
            repoNewThing.Dispose();
        }
    }
}

这是服务接口代码:

public interface INewThingService : IDisposable
{
        void Save(NewThing entity);
        void Delete(int id);
}

这是控制器代码:

public class TestController : BaseController
{
        private readonly INewThingService newThingService;
        private readonly IExistingThingService existingThingService;

        public TestController(INewThingService _newThingService, IExistingThingService _existingThingService)
        {
            this.newThingService = _newThingService;
            this.existingThingService = _existingThingService;
        }

        [HttpGet]
        public ActionResult Test(DataTableServerSide model)
        {
            return Json("Hello", JsonRequestBehavior.AllowGet);
        } 
}

ExistingThing服务是我继承的代码的一部分。我添加的是NewThing Service。

如果我运行上述代码,则请求将重新路由到错误处理程序,但实际上似乎没有任何相关的错误。如果我通过删除_newThingService参数来更改控制器构造函数,则可以正常工作。如果我将_existingThingService参数替换为代码中已存在的另一个服务,那也可以正常工作。

因此,我的新服务的构造或传递给控制器​​构造函数的方式存在问题,但是这似乎并不是一个错误-至少不是VS可以捕获的错误。

出了什么问题,或者我怎么知道出了什么问题?

已编辑----

否注册NewThingService

private static void RegisterServices(IKernel kernel)
{
      kernel.Bind<ProjectDbContext>().ToSelf().InRequestScope();
      kernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));
      kernel.Bind(typeof(INewThingService)).To(typeof(NewThingService));
}

IRepository声明似乎是通用的,而不是针对每个实体的声明:

public interface IRepository<TEntity> where TEntity : class
{
    TEntity FindById(object id);
    void InsertGraph(TEntity entity);
    void Update(TEntity entity);
    TEntity Update(TEntity dbEntity, TEntity entity);
    void Delete(object id);
    void Delete(TEntity entity);
    void Insert(TEntity entity);
    RepositoryQuery<TEntity> Query();
    void Dispose();
    void ChangeEntityState<T>(T entity, ObjectState state) where T : class;
    TEntity SetValues(TEntity dbEntity, TEntity entity);
    void SaveChanges();
}

0 个答案:

没有答案