Я пытаюсь использовать проект карты сайта ASP.NET MVC Codeplex с поставщиком настраиваемых динамических узлов. Это мой код провайдера узла. Он использует некоторый репозиторий для доступа к БД. На самом деле я не использую DI в этом классе, но приложение наследует NinjectHttpApplication, и у Sitemap есть проблемы с получением контроллера.
public class ContentPageDynamicNodeProvider : DynamicNodeProviderBase
{
private IRepository _repository;
public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
{
// Build value
var returnValue = new List<DynamicNode>();
// Create a node for each content page
_repository = new XmlDefaultRepository(ContentType.Page);
foreach(var page in _repository.GetInstances())
{
DynamicNode node = new DynamicNode();
node.Title = page.Title;
node.ParentKey = "Default";
node.RouteValues.Add("slug", page.Slug);
returnValue.Add(node);
}
// Return
return returnValue;
}
}
Затем в Site.Master я пытаюсь отобразить хлебные крошки следующим образом:
<%=Html.MvcSiteMap().SiteMapPath() %>
Мой маршрут по умолчанию, который начинается при запуске сайта, - Page / Display / {slug}, а для slug я использую "Default", вот часть global.asax.cs
routes.MapRoute(
"DefaultPage", RouteType.Regular,
"",
new { controller = "Page", action = "Display", slug = "Default" }, null
);
routes.MapRoute(
"PageBySlug", RouteType.Regular,
"{slug}",
new { controller = "Page", action = "Display", slug = "Default" }, null
);
routes.MapRoute(
"Default", RouteType.Regular,
"{controller}/{action}/{slug}",
new { controller = "Page", action = "Display", slug = "Default" }, null
);
У меня проблема в том, что, когда установлен пользовательский поставщик узлов сайта, я получаю эту ошибку во время выполнения:
Значение не может быть нулевым или пустым. Имя параметра: controllerName
Это трассировка стека (возможно, это поможет кому-то определить, что происходит). Насколько я могу судить, он идет на Ninject для контроллера, но не получает его.
[ArgumentException: значение не может быть нулевым или пустым. Имя параметра: имя_контроллера]
System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, String controllerName) +167 Ninject.Web.Mvc.NinjectControllerFactory.CreateController (RequestContext requestContext, String ControllerName) +151 MvcServerAccessAccessAccessMvcSiteMvcSiteMvcSiteMvcSiteMapule IControllerTypeResolver controllerTypeResolver, поставщик DefaultSiteMapProvider, HttpContext контекст, SiteMapNode узел) поставщик +533 MvcSiteMapProvider.DefaultAclModule.IsAccessibleToUser (IControllerTypeResolver controllerTypeResolver, DefaultSiteMapProvider, HttpContext контекст, SiteMapNode узел) +149 MvcSiteMapProvider.DefaultSiteMapProvider.IsAccessibleToUser (контекст HttpContext, SiteMapNode узел) +24 <бр > System.Web.SiteMapNode.IsAccessibleToUser (контекст HttpContext) +17
System.Web.SiteMapProvider.ReturnNodeIfAccessible (узел SiteMapNode) +42
System.Web.StaticSiteMapProvider.FindSiteMapNode (Stri ng rawUrl) +176
MvcSiteMapProvider.DefaultSiteMapProvider.FindSiteMapNode (контекст HttpContext) +282
System.Web.SiteMapProvider.get_CurrentNode () +56 MvcSiteMapProvider.Web.HpertorHtml.SathiteMap separatorCssClass, String linkCssClass, Boolean currentNodeAsLink, Object htmlAttributes) +81
MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath (MvcSiteMapHtmlHelper helper) +30, параметр Helper_Container_Container__
Любая помощь приветствуется.
Также обратите внимание, что без поставщика настраиваемых узлов (только статические узлы в файле .sitemap) все работает нормально.