我正在尝试用angular.so创建一个mvc项目,我创建了一个api controller,如您在这里所看到的:
namespace MvcApplication3.Controllers
{
public class TopicsController : ApiController
{
private IMessageBoardRepository _repo;
public TopicsController(IMessageBoardRepository repo)
{
_repo = repo;
}
public IEnumerable<Topic> Get(bool includeReplies = false)
{
IQueryable<Topic> results;
if (includeReplies == true)
{
results = _repo.GetTopicsIncludingReplies();
}
else
{
results = _repo.GetTopics();
}
var topics = results.OrderByDescending(t => t.Created)
.Take(25)
.ToList();
return topics;
}
// I didn't show this, but this is common
public HttpResponseMessage Get(int id, bool includeReplies = false)
{
IQueryable<Topic> results;
if (includeReplies == true)
{
results = _repo.GetTopicsIncludingReplies();
}
else
{
results = _repo.GetTopics();
}
var topic = results.Where(t => t.Id == id).FirstOrDefault();
if (topic != null) return Request.CreateResponse(HttpStatusCode.OK, topic);
return Request.CreateResponse(HttpStatusCode.NotFound);
}
}
}我使用ninject 3.2.1.0将我的接口绑定到它的存储库。
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<MessageBoardContext>().To<MessageBoardContext>().InRequestScope();
kernel.Bind<IMessageBoardRepository>().To<MessageBoardRepository>().InRequestScope();
}但是当我用这个url :http://localhost:53005/api/v1/topics调用这个api时,我得到了这个错误:
An error has occurred.Type 'MvcApplication3.Controllers.TopicsController' does not have a default constructorSystem.ArgumentException at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)发布于 2016-01-14 07:35:44
最后,我应该安装WebApiContrib.IoC.Ninject nuget并将这个解析器添加到ninjectwebcommen文件中,如下所示:
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
GlobalConfiguration.Configuration.DependencyResolver =
new NinjectResolver(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}https://stackoverflow.com/questions/34783419
复制相似问题