首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误的occurred.Type 'my名称控制器‘在System.Linq.Expressions.Expression没有默认的constructorSystem.ArgumentException

错误的occurred.Type 'my名称控制器‘在System.Linq.Expressions.Expression没有默认的constructorSystem.ArgumentException
EN

Stack Overflow用户
提问于 2016-01-14 06:57:26
回答 1查看 122关注 0票数 1

我正在尝试用angular.so创建一个mvc项目,我创建了一个api controller,如您在这里所看到的:

代码语言:javascript
运行
复制
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将我的接口绑定到它的存储库。

代码语言:javascript
运行
复制
   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时,我得到了这个错误:

代码语言:javascript
运行
复制
    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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-14 07:35:44

最后,我应该安装WebApiContrib.IoC.Ninject nuget并将这个解析器添加到ninjectwebcommen文件中,如下所示:

代码语言:javascript
运行
复制
   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;
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34783419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档