【发布时间】:2014-11-05 08:05:50
【问题描述】:
我的项目中有几个 Web API 控制器。在大量冗余代码之后,我将它们重构为下面的代码,这似乎是高度可重用的。但是,我突然收到错误Make sure that the controller has a parameterless public constructor,这似乎是由 Ninject 无法解析控制器绑定引起的。我不确定如何绑定它们。
我的代码:
public interface IController<T, TK>
{
DataSourceResult Get(DataSourceRequest request);
T Get(TK id);
HttpResponseMessage Post(T model);
T Put(T model);
TK Delete(TK id);
}
public abstract class BaseController<T, TK> : ApiController, IController<T, TK>
{
private readonly IRepository<T, TK> repository;
public BaseController(IRepository<T, TK> repository)
{
this.repository = repository;
}
/* methods here */
}
public class ReceiptsController : BaseController<ReceiptViewModel, long>
{
public ReceiptsController(IRepository<ReceiptViewModel, long> repository) :
base(repository)
{
}
}
在 ninject RegisterServices 方法中,我尝试了以下方法:
kernel.Bind<IController<OntvangstViewModel, long>>().To<OntvangstenController>();
kernel.Bind<BaseController<OntvangstViewModel, long>>().To<OntvangstenController>();
但似乎两者都不起作用。我的实现或继承是否错误?还是我应该以不同的方式绑定它们?
【问题讨论】:
-
Hmmmmmmm....我想先看看这个video。然后重新设计您的应用程序。
-
看了大约一百万篇关于为什么存储库是自发现火灾以来最好的东西的文章后,该视频看起来非常有趣。我回家后看看。
标签: c# asp.net-web-api ninject