0

我最初不认为这会是一个问题,但是当我不断收到异常时,我想我会在这里发帖,以防我是个白痴……

我有 2 个模块类,一个设置 NHibernate,一个设置 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 参数时遇到了问题。当我创建内核时,我确保列表在 Controller 模块之前有 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 回答