Есть ли способ использовать XmlSiteMapProvider в приложении WinForm / Console / VSTest? - PullRequest
3 голосов
/ 24 сентября 2008

Интересно, есть ли обходной путь для использования стандартного XmlSiteMapProvider в приложении, не являющемся asp.net, например, WinForm / Console или, в моем случае, VS Unit Test one.

Следующий код завершается ошибкой, поскольку он не может создать путь к файлу .sitemap внутри частного GetConfigDocument метода.

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

Мне кажется, правильное решение - написать другого поставщика.

1 Ответ

2 голосов
/ 25 сентября 2008

Не понимаю, почему нет. Это просто поставщик, который реализует интерфейс. Возможно, вам не понадобятся многие функции, но вы можете получить доступ к API для того, что он вам предоставляет. Ваши экраны WinForms могут просто использовать URL-адреса для идентификации, чтобы вы могли определить свое место в иерархии.

Что вам, возможно, придется сделать, это создать собственную реализацию провайдера, поскольку он будет использовать HttpContext для получения URL-адреса текущего веб-запроса для определения текущего места размещения, в то время как вам нужно будет получить это значение по-другому. Вот что может быть сложно, потому что ваше приложение WinForm может отображать несколько окон одновременно. Если вы знаете, что одновременно отображается только одно окно, вы можете использовать статическое значение, заданное до доступа к API SiteMap.

Теперь вы должны подвергнуть сомнению ценность использования API, если вам нужно выполнить всю работу. Там может быть недостаточно выгоды, чтобы сделать его стоящим.

...