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でこの質問を見つけました。すべての回答で、ServiceLocationを使用しないでください。
私はどうしたらいいですか?