Ninject ASP.NET MVC4:“System.MissingMethodException:没有为此对象定义无参数构造函数。”

时间:2013-03-05 10:28:46

标签: asp.net asp.net-mvc-4 ninject

我已经通过Nuget安装了Ninject,其中包括Ninject,Ninject.Web.Common,Ninject.Web.Mvc(3)。我现在有一个问题,试图使用在NinjectWebCommon的RegisterServices中注册的服务不起作用,我得到上面的错误。这先前工作,所以我必须做一些事情,把整个事情搞砸了。有什么帮助吗?

我的代码如下。

命名空间NinjectTestProject.Controllers {

public interface ITest
{
    string Test();
}

public class Tester : ITest
{
    public string Test()
    {
        return "testing";
    }
}


public class HomeController : Controller
{
    private readonly ITest _test;

    public HomeController(ITest test)
    {
        _test = test;
    }

    public ActionResult Test()
    {
        return Content(_test.Test());
    }

}

}

服务注册NinjectWebCommon

...

    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<ITest>().To<Tester>();
    }        

3 个答案:

答案 0 :(得分:0)

啊我刚刚找到了这一刻的方式。我简单地为MVC3重新安装了Ninject,它以某种方式解决了这个问题。

答案 1 :(得分:0)

您可以尝试遵循http://silesiaresearch.com/blog/BlogCSharp#Blog_20131204中描述的解决方案。基本上您需要使用自定义CreateKernel()扩展DependencyResolver方法,这意味着您的RegisteredServices()方法应该有效。

它在我的网站上有效。但是我对同一症状有不同的原因。我的绑定工作正常,但MVC框架抱怨我的控制器中缺少默认构造函数。事实证明,我错过了已安装的名为Ninject.Mvc3

的NUGET组件

答案 2 :(得分:0)

我没有装配属性:

[assembly: PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
[assembly: ApplicationShutdownMethod(typeof(NinjectWebCommon), "Stop")]