我已经接管了一个用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();
}