Удалить несколько модулей - PullRequest
0 голосов
/ 06 марта 2011

Сначала я не думал, что это будет проблемой, но, поскольку я продолжаю получать сообщения об исключениях, я буду публиковать здесь, если я идиот ...

У меня есть 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. Когда я создаю ядро, в списке есть модуль Nhibernate до модуля Controller.

Есть ли что-нибудь сразу глупое в том, что я делаю выше?

1 Ответ

0 голосов
/ 06 марта 2011

Предполагается:

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);
    }
}
...