Laden Sie eine XML-Sitemap in MvcSiteMapProvider, basierend auf der Benutzerrolle

Ich habe v4 von MvcSiteMapProvider installiert und möchte jetzt eine Sitemap dynamisch laden. Meine Anforderungen sind einfach: Laden Sie eine XML-Sitemap auf jede Seitenanfrage, basierend auf der aktuell angemeldeten Benutzerrolle, z. AdminSiteMap.xml und UserSiteMap.xml

Es scheint, dass dies getan werden kann:

Verwenden von asp.net MVCSiteMapProvider v4 mit 2 Sitemaphttps: //github.com/maartenba/MvcSiteMapProvider/wiki/Multiple-Sitemaps-in-One-Applicatio

So im Grunde müssen Sie eine DI verwenden, um dies zu erreichen overkill IMHO). Jede Chance, die dies getan werden kannohn a DI?

So wie ich ASP Boilerplate benutze http: //www.aspnetboilerplate.com) Ich habe Castle Windsor als meinen DI.

So habe ich über NuGet "MvcSiteMapProvider MVC5 Windsor Dependency Injection Configuration" installiert. Wenn ich die App jetzt jedoch starte, erhalte ich die folgende Fehlermeldung:

Der SiteMapLoader wurde nicht initialisiert.

Check the 'MvcSiteMapProvider_UseExternalDIContainer' setting in the AppSettings section of web.config.

If the setting is set to 'false', you will need to call the MvcSiteMapProvider.DI.Composer.Compose() method at the end of Application_Start in the Global.asax file. Alternatively, if you are using .NET 4.0 or higher you can install the MvcSiteMapProvider.MVCx NuGet package corresponding to your MVC version.

If the setting is set to 'true', you must set the SiteMaps.Loader property during Application_Start in Global.asax to an instance of the built-in SiteMapLoader type or a custom ISiteMapLoader instance. This can be achieved most easily by using your external DI container.

Ich habe die Standardkonfiguration nicht geändert und bestätigt, dass dasInstallieren( Methode wird in @ aufgerufpublic class MvcSiteMapProviderInstaller: IWindsorInstaller als es dort einen Haltepunkt trifft.

So was fehle ich hier, um diese Arbeit zu bilden. Denken Sie daran, ich versuche nur, bei jeder Anfrage eine SiteMap zu laden, die auf dem angemeldeten Benutzer basiert.

**** UPDATE ****

Während es nicht elegant sein mag, erforderte es keine große Menge an Code, wie durch die Implementierung eines DI-Containers vorgeschlagen. Siehe die Antwort von viggity (ungefähr die vierte unten) unter Verwenden mehrerer MvcSiteMaps

Antworten auf die Frage(1)

Ihre Antwort auf die Frage