我有一个使用Ninject和MvcSiteMapProvider的 MVC3 应用程序。
我创建了这个类,MvcSiteMapProvider 使用它来动态地将节点添加到我的站点地图:
public class PageNodeProvider : DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> 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<Repository>()
该方法来使用服务位置。但是,我在查看 NinjectHttpApplication 的定义时看到了这个属性:
// Summary:
// Gets the kernel.
[Obsolete("Do not use Ninject as Service Locator")]
public IKernel Kernel { get; }
Do not use Ninject as Service Locator
?!我该怎么做呢?然后我在stackoverflow上找到了这个问题,所有答案都说不要使用服务位置。
我应该做些什么?