IControllerFactory 'MyWebSite.WebUI.Infrastructure.NinjectControllerFactory' не вернул контроллер для имени 'Admin' - PullRequest
5 голосов
/ 26 ноября 2010

Я получаю вышеупомянутое, когда я пытаюсь открыть представление в контроллере в области.Ninject настраивается следующим образом:

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel kernel = new StandardKernel(new RLSBCWebSiteServices());

    protected override IController GetControllerInstance(RequestContext context, Type controllerType)
    {
        if (controllerType == null)
            return null;
        return (IController)kernel.Get(controllerType);
    }

    private class MyWebSiteServices : NinjectModule
    {
        public override void Load()
        {
            Bind<IMatchesRepository>().To<SqlMatchesRepository>().WithConstructorArgument("connectionString",
                ConfigurationManager.ConnectionStrings["MyWebSiteDb"].ConnectionString);
        }
    }
}

Если я помещаю точку останова в код, я вижу, что контекст RequestContext содержит следующие значения:

context.RouteData.DataTokens.Values[0] = “MyWebSite.WebUI.Areas.Visitor”  context.RouteData.DataTokens.Values[1] = “Visitor” which is the Area  
context.RouteData.Values.Values[0] = “admin” which is the Controller  
context.RouteData.Values.Values[1] = “register” which is the View

Однако controllerType == null,вместо этого на имени контроллера.

Этот переход на новую страницу инициируется

Html.ActionLink("here", "Register", "Admin", new { area = "Visitor" }, null)

, который находится на странице входа в систему.Однако то же самое происходит, если я ввожу

http://example.com/Visitor/admin/register

в IE8

Регистрация области выглядит следующим образом:

public class VisitorAreaRegistration : AreaRegistration
{
    public override string AreaName { get { return "Visitor"; } }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Visitor_default",
            "Visitor/{controller}/{action}/{id}",
            new { controller = "Admin", action = "Register", id = UrlParameter.Optional }
        );
    }
}

Кому-нибудь удалось получить области, работающие с NinjectControllerFactory, или что-то не так с моей настройкой?

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Вместо создания собственного NinjectControllerFactory используйте последнюю версию Ninject.Web.Mvc.Это поддерживает Области.Смотри: https://github.com/ninject/ninject.web.mvc

1 голос
/ 07 декабря 2018

Проверьте ваш контроллер и название действия в поле зрения.Я также получил ту же ошибку, поскольку неправильное имя действия.

...