In my application I have a register of projects.
To access these projects is the url: /project/{url-project}
the value of `{url-project}` is defined in the registration of the project!
I use this project to generate the path, but as the "register project" is dynamic had to implement it manually as shows this article.
So I did:
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
}
In my 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>
Problem
My problem is ProjectRepository
which is always null!
kernel.Bind<IProjectRepository>().To<ProjectRepository>().InRequestScope();
But in my setup Ninject is correct! This repository is used in the controller and it works perfectly!
Attemps
I tried to inject this dependency via the constructor but the result was the same!
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
}