В моем приложении есть реестр проектов.Для доступа к этим проектам используется 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 верен!Этот репозиторий используется в контроллере, и он прекрасно работает !
Попытки
Я пытался внедрить эту зависимость через конструктор, но результат был тот же!
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
}