У меня есть приложение MVC3, которое использует Ninject и MvcSiteMapProvider .
Я создал этот класс, который MvcSiteMapProvider использует для динамического добавления узлов в мою карту сайта:
public class PageNodeProvider : DynamicNodeProviderBase
{
public override IEnumerable GetDynamicNodeCollection()
{
// need to get repository instance
var repository = // how do I get this???
foreach (var item in repository.GetItems())
{
yield return MakeDynamicNode(item);
}
}
}
MvcSiteMapProvider сам создает экземпляр этого типа, поэтому я не уверен, как внедрить в него свой репозиторий.
Я подумал об использовании местоположения службы, получив дескриптор своего ядра и вызвав Get
в методе. Но я увидел это свойство, когда посмотрел на определение NinjectHttpApplication:
// Summary:
// Gets the kernel.
[Obsolete("Do not use Ninject as Service Locator")]
public IKernel Kernel { get; }
Не использовать Ninject в качестве локатора службы
?! Как еще я могу это сделать?
Затем я нашел этот вопрос здесь, в stackoverflow , и во всех ответах говорится, что не использовать Service Location.
Что мне делать?