我正在使用 EF5 和 ninject 构建一个 MVC4 应用程序。当我从 MVC3 升级到 4 时出现问题。所以我创建了一个全新的解决方案,获取了我所有的 nuget 包,添加了所有引用,然后复制到我的代码中。
项目建设,太棒了。
我的问题是(Ninjection)sp?似乎没有正确接线。当我尝试加载页面时,我得到“没有为此对象定义无参数构造函数”作为运行时错误。但是,如果我简单地添加一个空的公共无参数构造函数,页面就会呈现,并且一切正常。
我的 App_Start 代码运行良好,NinjectWebCommon.cs(包含在问题的底部)我已经逐步完成了代码,但除了复制和粘贴之外,还遵循了在线教程。我不太了解 IoC,不知道下一步该做什么。
namespace search.Controllers
{
public class HomeController : Controller
{
ICamaService _service = null;
[Inject]
public HomeController(ICamaService service)
{
_service = service;
}
************** ADDING THIS FIXES THE RUNTIME ERROR *********
public HomeController(){
;
}
***********
//TODO: ADD ACTIONS
public ViewResult Index()
{
return View();
}
}
}
这是我的作文根:
[assembly: WebActivator.PreApplicationStartMethod(typeof(search4.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(search4.App_Start.NinjectWebCommon), "Stop")]
namespace search4.App_Start
{
using System;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
using search.Services;
using search.Data;
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
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;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICamaContext>().To<CamaContext>().InRequestScope();
kernel.Bind<ICamaService>().To<CamaService>().InRequestScope();
}
}
}
![异常截图][1]
http://shareimage.ro/viewer.php?file=svs5kwamqy0pxbyntig4.gif