0

MVC 2プレビューを実行していますが、Ninject2MVCを使用するのはこれが初めてです。

私が継続的に取得しているエラーは次のとおりです。タイプ'MyMVC.Controllers.EventsController'のコントローラーを作成しようとしたときにエラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認してください。

Global.csにあるのはこれです:

public class MvcApplication : NinjectHttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("elmah.axd");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Home", action = "Index", id = "" }
        );
    }

    protected override void OnApplicationStarted()
    {
        RegisterRoutes(RouteTable.Routes);
        RegisterAllControllersIn(Assembly.GetExecutingAssembly());
    }

    protected override IKernel CreateKernel()
    {

        return new StandardKernel(new ServiceModule());
    }
}

internal class ServiceModule : NinjectModule
{
    public override void Load()
    {
        Bind<IEventService>().To<EventService>();

        Bind<IEventRepository>().To<EventRepository>();

    }
}

そして、これは私のコントローラーがどのように見えるかです。

public class EventsController : Controller
{
    private IEventService _eventService;
    //
    // GET: /Events/

    public EventsController(IEventService eventService)
    {
        _eventService = eventService;
    }
    public ActionResult Index(string name)
    {

        return View(_eventService.GetEvent(name));
    }

    public ActionResult UpcomingEvents()
    {
        return View(_eventService.GetUpcomingEvents().Take(3).ToList());
    }

}
4

2 に答える 2

1

Ninjectは使用していませんが、独自のIControllerFactoryを実装する必要があると思います。MVC 2に更新するまで。次に、RegisterAllControllersIn(..)の代わりにそれを利用します。

ControllerBuilder.Current.SetControllerFactory(new MyNinjectControllerFactory());

編集:繰り返しますが、私はNinjectにそれほど精通していませんが、これは単純なファクトリとして機能する可能性があります。

public class MyNinjectControllerFactory : DefaultControllerFactory
{
            protected override IController GetControllerInstance(Type controllerType)
            {
               return [Container].GetInstance(controllerType) as Controller;               
            }
}
于 2009-09-17T20:40:21.520 に答える
0

明らかなことを述べるリスクを冒して、イベントコントローラーにパラメーターなしのコンストラクターを追加してみてください。

public class EventsController : Controller
{
    private IEventService _eventService;
    //
    // Parameterless constructor, so NInject will work
    public EventsController() {}
    //
    // Regular constructor
    public EventsController(IEventService eventService)
    {
        _eventService = eventService;
    }
于 2009-09-17T20:35:43.620 に答える