EF5 と ninject を使用して MVC4 アプリを構築しています。MVC3 から 4 にアップグレードしたときに何かが壊れました。そのため、まったく新しいソリューションを作成し、すべてのナゲット パッケージを取得し、すべての参照を追加してから、コードにコピーしました。
プロジェクトのビルド、素晴らしいです。
私の問題は(Ninjection)spですか?正しく配線されていないようです。ページを読み込もうとすると、実行時エラーとして「このオブジェクトにパラメーターのないコンストラクターが定義されていません」が表示されます。ただし、空の public パラメーターなしのコンストラクターを追加するだけで、ページがレンダリングされ、すべてがうまくいきます。
私の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