Как я могу использовать ninject в AreaRegistration

У меня есть область "Аккаунт" в моем проекте mvc3.

Он имеет класс AreaRegistration, чтобы ограничить видимость только для зарегистрированных пользователей, например:

public class AccountAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Account";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Account_default",
            "{account}/{controller}/{action}/{id}",
            new {controller = "Dashboard", action = "Index", id = UrlParameter.Optional },
            new {account = new MustBeRegisteredAccount(DEPENDENCIES)},
            new string[] {"Continuum.Web.Areas.Account.Controllers"}
        );
    }
}

так как мне настроить ninject, чтобы иметь возможность разрешать ЗАВИСИМОСТИ / создавать объект MustBeRegisteredAccount?

1 ответ

Решение

Сначала я бы попробовал использовать Constructor Injection (т.е. посмотреть, использует ли MVC зарегистрированный DependencyResolver создавать экземпляры AreaRegistration тоже классы (так или иначе не нашли что-либо в отношении того, должно ли это работать, но есть довольно быстрый способ узнать эмпирически:D).

В противном случае, используя DependencyResolver.GetService<MustBeRegisteredAccount>() это обходной путь службы локатор (антипаттерн) в земле MVC. (Расширение Ninject.MVC3 преднамеренно не предоставляет глобальный экземпляр ядра, так как это просто стимулирует безвозмездное использование).

См. http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html

Другие вопросы по тегам