Asp.net mvc 4 如何使用带有StructureMap DI的MVCSiteMapProvider v4配置多个站点地图
本质上,问题是我无法让我的站点地图配置支持多个站点地图。它总是在寻找“默认值”,即使当我命名我的实例并请求另一个实例时也是如此。现在是背景 我一直在为MVCSiteMapProvider的新实现倾注大量的文档。他们现在使用依赖项注入来配置SiteMapProvider。我们有一个现有的StructureMap DI实现,所以我按照说明添加了Asp.net mvc 4 如何使用带有StructureMap DI的MVCSiteMapProvider v4配置多个站点地图,asp.net-mvc-4,dependency-injection,sitemap,mvcsitemapprovider,Asp.net Mvc 4,Dependency Injection,Sitemap,Mvcsitemapprovider,本质上,问题是我无法让我的站点地图配置支持多个站点地图。它总是在寻找“默认值”,即使当我命名我的实例并请求另一个实例时也是如此。现在是背景 我一直在为MVCSiteMapProvider的新实现倾注大量的文档。他们现在使用依赖项注入来配置SiteMapProvider。我们有一个现有的StructureMap DI实现,所以我按照说明添加了 ObjectFactory.Configure(x => { ... x.AddRegistry<MvcSiteMapProviderRegis
ObjectFactory.Configure(x =>
{
...
x.AddRegistry<MvcSiteMapProviderRegistry>();
...
});
但它一定不能找到“TestSiteMapProvider”,因为它总是显示“default”,如果它不存在,则会抱怨
我还认为这可能与缓存有关,因为我看到这里引用的文件名,但我不知道如何向缓存中添加多个实例,所以我只是禁用了它。无论如何,我真的没有对我的网站地图做任何花哨的事情,而这整件事真的感觉像是为了得到一些自动面包屑而大肆渲染 显然还有另一个我不知道的帮助医生。到目前为止,我已经正确地完成了所有步骤,但我还需要实现ISitemApacheKeyGenerator 查看此文档(我开始时未将其命名为此。)
// Register the sitemap builder
string absoluteFileName = HostingEnvironment.MapPath("~/Main.sitemap");
string absoluteFileName2 = HostingEnvironment.MapPath("~/Test.sitemap");
var xmlSource = this.For<IXmlSource>().Use<FileXmlSource>()
.Ctor<string>("fileName").Is(absoluteFileName);
var reservedAttributeNameProvider = this.For<ISiteMapXmlReservedAttributeNameProvider>()
.Use<SiteMapXmlReservedAttributeNameProvider>()
.Ctor<IEnumerable<string>>("attributesToIgnore").Is(new string[0]);
var builder = this.For<ISiteMapBuilder>().Use<CompositeSiteMapBuilder>()
.EnumerableOf<ISiteMapBuilder>().Contains(y =>
{
y.Type<XmlSiteMapBuilder>()
.Ctor<ISiteMapXmlReservedAttributeNameProvider>().Is(reservedAttributeNameProvider)
.Ctor<IXmlSource>().Is(xmlSource);
y.Type<ReflectionSiteMapBuilder>()
.Ctor<IEnumerable<string>>("includeAssemblies").Is(includeAssembliesForScan)
.Ctor<IEnumerable<string>>("excludeAssemblies").Is(new string[0]);
y.Type<VisitingSiteMapBuilder>();
});
var xmlSource2 = this.For<IXmlSource>().Use<FileXmlSource>()
.Ctor<string>("fileName").Is(absoluteFileName2);
var builder2 = this.For<ISiteMapBuilder>().Use<CompositeSiteMapBuilder>()
.EnumerableOf<ISiteMapBuilder>().Contains(y =>
{
y.Type<XmlSiteMapBuilder>()
.Ctor<ISiteMapXmlReservedAttributeNameProvider>().Is(reservedAttributeNameProvider)
.Ctor<IXmlSource>().Is(xmlSource2);
y.Type<ReflectionSiteMapBuilder>()
.Ctor<IEnumerable<string>>("includeAssemblies").Is(includeAssembliesForScan)
.Ctor<IEnumerable<string>>("excludeAssemblies").Is(new string[0]);
y.Type<VisitingSiteMapBuilder>();
});
// Configure the builder sets
this.For<ISiteMapBuilderSetStrategy>().Use<SiteMapBuilderSetStrategy>()
.EnumerableOf<ISiteMapBuilderSet>().Contains(x =>
{
/* x.Type<SiteMapBuilderSet>()
.Ctor<string>("instanceName").Is("default")
.Ctor<bool>("securityTrimmingEnabled").Is(securityTrimmingEnabled)
.Ctor<bool>("enableLocalization").Is(enableLocalization)
.Ctor<ISiteMapBuilder>().Is(builder)
.Ctor<ICacheDetails>().Is(cacheDetails);*/
/*
x.Type<SiteMapBuilderSet>()
.Ctor<string>("instanceName").Is("MainSiteMapProvider")
.Ctor<bool>("securityTrimmingEnabled").Is(securityTrimmingEnabled)
.Ctor<bool>("enableLocalization").Is(enableLocalization)
.Ctor<ISiteMapBuilder>().Is(builder)
.Ctor<ICacheDetails>().Is(cacheDetails);*/
x.Type<SiteMapBuilderSet>()
.Ctor<string>("instanceName").Is("TestSiteMapProvider")
.Ctor<bool>("securityTrimmingEnabled").Is(securityTrimmingEnabled)
.Ctor<bool>("enableLocalization").Is(enableLocalization)
.Ctor<ISiteMapBuilder>().Is(builder2)
.Ctor<ICacheDetails>().Is(cacheDetails);
});
MvcSiteMapProvider.SiteMaps.Loader = Resolver.Get<ISiteMapLoader>();
@Html.MvcSiteMap("TestSiteMapProvider").Menu(false, true, true)