Привет, это действительно странно. Я использую MVCsiteMapProvider для создания панели навигации. У меня есть служба под названием Code Serice
public CodeService(
ICodeRepository codeRepository,
ICodeStageRepository codeStageRepository,
ICodeListRepository codeListRepository,
ICookieService cookieService)
{
this.codeRepository = codeRepository;
this.codeListRepository = codeListRepository;
this.cookieService = cookieService;
this.codeStageRepository = codeStageRepository;
}
если я добавлю дополнительный интерфейс к этому конструктору, мой проект будет построен, но все мое приложение выйдет из строя, когда я запущу его со следующей ошибкой.
Весь мой макет
@using System.Web.Optimization
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title - ReferenceDataManagement </title>
@Styles.Render("~/content/css/MasterCss")
@Styles.Render("~/content/jquery.jqGrid/jqgridcss")
@Styles.Render("~/content/themes/base/jqueryuicss")
</head>
<body>
<div class="container-fluid">
<div class="row-fluid"> @RenderPage("~/Views/Shared/_Header.cshtml") </div>
<div class="row-fluid"> @Html.MvcSiteMap().Menu("BootstrapMenuHelperModel") </div>
<div class="row-fluid"> @RenderBody() </div>
<div class="row-fluid"> @RenderPage("~/Views/Shared/_Footer.cshtml") </div>
</div>
@Scripts.Render("~/Scripts/MasterScripts")
@RenderSection("scriptholder", false)
</body>
</html>
И помощник меню Bootstrap выглядит следующим образом
@model MenuHelperModel
@helper TopMenu(List<SiteMapNodeModel> nodeList)
{
@:
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand hidden-desktop" href="#">RDM</a>
<div class="nav-collapse collapse">
<ul class="nav">
@foreach (var node in nodeList)
{
var current = String.Empty;
var url = node.IsClickable ? node.Url : "#";
if (node.IsCurrentNode)
{
current = "active";
}
if (!node.Children.Any())
{
@:<li class="@current"><a href="@url">@node.Title</a></li>
}
else
{
foreach (var child in node.Children)
{
if (child.IsCurrentNode)
{
current = "active";
}
}
@:<li class="dropdown @current"><a class="dropdown-toggle" data-toggle="dropdown" href="@url">@node.Title <b class="caret"></b></a>@DropDownMenu(node.Children)</li>
}
if (node != nodeList.Last())
{
@:<li class="divider-vertical"></li>
}
}
</ul>
<ul class="nav pull-right">
<li class="divider">
@Html.ActionLink("Sign Out", "SignOutConfirmation", "Account")
</li>
</ul>
</div>
</div>
</div>
</div>
}
@helper DropDownMenu(SiteMapNodeModelList nodeList)
{
<ul class="dropdown-menu">
@foreach (var node in nodeList)
{
if (node.Title == "Separator")
{
@:<li class="divider"></li>
continue;
}
var url = node.IsClickable ? node.Url : "#";
if (!node.Children.Any())
{
@:<li><a href="@url">@node.Title</a></li>
}
else
{
@:<li class="dropdown-submenu"><a href="@url">@node.Title</a>@DropDownMenu(node.Children)</li>
}
}
</ul>
}
@TopMenu(Model.Nodes)
Я не вижу, как эти фрагменты кода связаны друг с другом или где может возникнуть конфликт. Кто-нибудь сталкивался с подобной проблемой?
ИЗМЕНИТЬ:
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="About" controller="Home" action="About"/>
<mvcSiteMapNode title="Contact" controller="Home" action="Contact"/>
<mvcSiteMapNode title="Context" controller="Context" action="Index"/>
<mvcSiteMapNode title="Code List" controller="CodeList" action="Index" roles="Administrator" />
<mvcSiteMapNode title="Code" controller="Code" action="Index" roles="Administrator" />
<mvcSiteMapNode title="Users" controller ="" clickable="false" roles="Administrator, ContextOwner">
<mvcSiteMapNode title="Application Users" controller="User" action="Index" roles="ContextOwner"/>
<mvcSiteMapNode title="Maintain Context Users" controller="ContextUser" action="Index"/>
</mvcSiteMapNode>
<mvcSiteMapNode title="Admin" clickable="false" controller="UploadXmlSchema" roles="Administrator">
<mvcSiteMapNode title="XML Schema" controller="UploadXmlSchema" action="Index" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Approvals" controller="Approval" action="Index" />
</mvcSiteMapNode>
</mvcSiteMap>