Использование MvcSiteMapProvider + DI + Шаблон репозитория = объект репозитория пуст
В моем приложении у меня есть реестр проектов. Для доступа к этим проектам есть URL: /project/{url-project}
the value of `{url-project}` is defined in the registration of the project!
Я использую этот проект для генерации пути, но так как "регистр проекта" является динамическим, пришлось реализовать его вручную, как показано в этой статье.
Так я и сделал:
public class ProjectDetailsDynamicNodeProvider : DynamicNodeProviderBase
{
[Inject]
public IProjectRepository ProjectRepository { get; set; }
#region Overrides of DynamicNodeProviderBase
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
// Build value
var returnValue = new List<DynamicNode>();
var listDB = (from p in ProjectRepository.Query()
select new { p.Name, p.ID });
// Create a node for each album
foreach (var project in listDB.ToList())
{
var node = new DynamicNode { Title = project.Name };
node.RouteValues.Add("id", project.ID);
returnValue.Add(node);
}
// Return
return returnValue;
}
#endregion
}
В моем Mvc.sitemap
<mvcSiteMapNode title="Projetos" controller="Project" action="Index">
<mvcSiteMapNode title="Novo Projeto" controller="Project" action="Create" />
<mvcSiteMapNode title="Projeto" action="About" dynamicNodeProvider="BindSolution.Infra.ProjectDetailsDynamicNodeProvider, BindSolution" />
</mvcSiteMapNode>
проблема
Моя проблема ProjectRepository
который всегда нулевой!
kernel.Bind<IProjectRepository>().To<ProjectRepository>().InRequestScope();
Но в моей настройке Ninject правильный! Этот репозиторий используется в контроллере и работает отлично!
Attemps
Я пытался внедрить эту зависимость через конструктор, но результат был тот же!
public class ProjectDetailsDynamicNodeProvider : DynamicNodeProviderBase
{
public IProjectRepository ProjectRepository { get; set; }
public ProjectDetailsDynamicNodeProvider(IProjectRepository projectRepository)
{
ProjectRepository = projectRepository
}
#region Overrides of DynamicNodeProviderBase
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
// Build value
var returnValue = new List<DynamicNode>();
var listDB = (from p in ProjectRepository.Query()
select new { p.Name, p.ID });
// Create a node for each album
foreach (var project in listDB.ToList())
{
var node = new DynamicNode { Title = project.Name };
node.RouteValues.Add("id", project.ID);
returnValue.Add(node);
}
// Return
return returnValue;
}
#endregion
}
1 ответ
Решение
Я считаю, что этот вопрос похож на ваш: MVC3, Ninject, MvcSiteMapProvider - Как внедрить зависимость в переопределенный метод
Это означает, что в принципе вы не можете найти хорошее решение.