Как я могу использовать 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