2008-09-23 14 views
3

Je me demande s'il existe une solution de contournement pour utiliser le XmlSiteMapProvider standard dans une application non asp.net, comme WinForm/Console ou, dans mon cas, VS Unit Test one.Y a-t-il un moyen d'utiliser XmlSiteMapProvider dans l'application WinForm/Console/VSTest?

Le code suivant échoue, car il ne peut pas créer un chemin d'accès au fichier .sitemap dans une méthode privée GetConfigDocument.

XmlSiteMapProvider provider = new XmlSiteMapProvider(); 
NameValueCollection providerAttributes = new NameValueCollection(); 
providerAttributes.Add("siteMapFile", "Web.sitemap"); 
provider.Initialize("XmlSiteMapReader", providerAttributes); 
provider.BuildSiteMap(); 

Je pense que la bonne solution est d'écrire un autre fournisseur.

Répondre

2

Je ne vois pas pourquoi pas. C'est juste un fournisseur qui implémente une interface. Vous n'avez peut-être pas besoin de nombreuses fonctionnalités, mais vous pouvez accéder à l'API pour ce qu'elle vous fournit. Vos écrans WinForms peuvent simplement utiliser les URL pour l'identification afin que vous puissiez déterminer votre place dans la hiérarchie. Vous devrez peut-être créer une implémentation personnalisée du fournisseur car elle utilisera HttpContext pour obtenir l'URL de la demande Web actuelle afin d'identifier l'emplacement actuel, alors que vous devrez obtenir cette valeur différemment. C'est ce qui pourrait être difficile parce que votre application WinForm pourrait afficher plusieurs fenêtres à la fois. Si vous savez qu'une seule fenêtre s'affiche à la fois, vous pouvez utiliser une valeur statique définie avant d'accéder à l'API SiteMap.

Maintenant, vous devez vous interroger sur la valeur d'utiliser une API si vous devez faire tout le travail. Il n'y a peut-être pas assez d'avantages pour que cela en vaille la peine.