【问题标题】:Using MvcSiteMapProvider + DI + Repository pattern = repository object is null使用 MvcSiteMapProvider + DI + 存储库模式 = 存储库对象为空
【发布时间】:2012-01-27 07:36:16
【问题描述】:

在我的应用程序中,我有一个项目登记册。 访问这些项目的网址是:/project/{url-project}

the value of `{url-project}` is defined in the registration of the project!

我使用this project 生成路径,但由于“注册项目”是动态的,因此必须手动实现它,如this article 所示。

所以我做到了:

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
}

【问题讨论】:

  • 如何设置控制器以使用 Ninject?

标签: asp.net-mvc-3 dependency-injection repository-pattern mvcsitemapprovider ninject.web.mvc


【解决方案1】:

我相信这个问题和你的类似: MVC3, Ninject, MvcSiteMapProvider - How to inject dependency to overridden method

这意味着基本上你没有一个好的解决方案。

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多