0

もともとこれが問題になるとは思いませんでしたが、例外が発生し続けるので、私がばかである場合に備えてここに投稿すると思いました...

私は 2 つのモジュール クラスを持っています。1 つは NHibernate をセットアップし、もう 1 つは MVC コントローラーをセットアップします。

public class NHibernateModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISessionManager>().To<SessionManager>();
    }
}

public class ControllerModule : NinjectModule
{
    public override void Load()
    {
        Bind<SomeController>().ToSelf()
                             .WithConstructorArgument("sessionManager", Kernel.Get<ISessionManager>());
    }
}

コントローラーを使用しようとすると、sessionManager 引数のバインドに問題があることがわかります。カーネルを作成するときに、コントローラー モジュールの前に Nhibernate モジュールがあることを確認します。

上記で行っていることにすぐに愚かなことはありますか?

4

1 に答える 1

0

仮定:

public class SomeController : Controller
{
    private readonly ISessionManager _sessionManager;
    public HomeController(ISessionManager sessionManager)
    {
        _sessionManager = sessionManager;
    }

    public ActionResult Index()
    {
        return View();
    }
}

以下で十分です。

public class NHibernateModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISessionManager>().To<SessionManager>();
    }
}

public class ControllerModule : NinjectModule
{
    public override void Load()
    {
        Bind<SomeController>().ToSelf();
    }
}

およびGlobal.asax:

public class MvcApplication : NinjectHttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

    protected override void OnApplicationStarted()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    protected override IKernel CreateKernel()
    {
        var modules = new INinjectModule[]
        {
            new NHibernateModule(),
            new ControllerModule()
        };

        return new StandardKernel(modules);
    }
}
于 2011-03-06T10:22:22.680 に答える