MvcSiteMapProvider внутри общего проекта - ошибка внедрения зависимости - PullRequest
0 голосов
/ 24 октября 2018

Так что я уже год использую MvcSiteMapProvider с моими приложениями MVC (MVC5, , а не Core) и мне это нравится.Поскольку все мои приложения в значительной степени используют один и тот же заголовок, я подумал, что могу просто поместить карту сайта в отдельный проект и ссылаться на него из других проектов.

Итак, я начал с пустого проекта MVC, настроил MvcSiteMapProvider и заставил его работать нормально.Я установил RazorGenerator.MVC, чтобы мои взгляды компилировались в DLL.

Я создал второй пустой проект и сослался на проект карты сайта.Затем я обратился к помощнику Html.MvcSiteMap из проекта NEW.Я получил ошибку:

«HtmlHelper» не содержит определения для «MvcSiteMap»

Я подумал, что, возможно, класс MvcSiteMap унаследовал бы, когда я ссылался на исходный проектDLL, но я думаю, что нет.Справедливо.Я не хочу устанавливать MvcSitemapProvider в новом проекте, потому что это лишило бы смысла цель этого упражнения - сохранить все элементы карты сайта в одном проекте без лишних повсюду.

Итак, я решил использовать этого помощника в исходном проекте карты сайта в представлении CommonMenu .Затем в моем новом проекте я делаю это

@Html.Partial("CommonMenu")

Только теперь, когда я запускаю его, я получаю эту ошибку.


SiteMapLoader не был инициализирован.

Проверьте параметр 'MvcSiteMapProvider_UseExternalDIContainer' в разделе AppSettings файла web.config.

Если для параметра установлено значение false, вам нужно вызвать метод MvcSiteMapProvider.DI.Composer.Compose()в конце Application_Start в файле Global.asax.В качестве альтернативы, если вы используете .NET 4.0 или выше, вы можете установить пакет Nuvet MvcSiteMapProvider.MVCx, соответствующий вашей версии MVC.

Если для этого параметра установлено значение «true», необходимо установить свойство SiteMaps.Loader.во время Application_Start в Global.asax для экземпляра встроенного типа SiteMapLoader или пользовательского ISiteMapLoader экземпляра.Этого проще всего достичь, используя внешний контейнер DI.


Так что это значение IS установлено в false в моем исходном проекте карты сайта.Я добавил строку MvcSiteMapProvider.DI.Composer.Compose() в файл Global.asax.cs проекта карты сайта в конце функции application_start, перекомпилировал, затем перекомпилировал новый проект.Но все же .. та же самая ошибка , когда я запускаю новый проект.

Я погуглил эту ошибку, и все, кто сталкивался с ней, сказали, что они просто установили Ninject через Nuget, поэтому я установил его в исходном проекте Sitemap, перекомпилировал, затем перекомпилировал проект, который ссылался на него.Та же ошибка

Могу ли я что-нибудь сделать в исходном проекте SiteMap, чтобы я не получил эту ошибку, когда новый проект загружает это CommonMenu представление из исходного проекта?

Я мог бы пойтивернемся к вызову помощника Html.MvcSiteMap в новом проекте и установим туда MVCSiteMapProvider, но в новом проекте есть некоторые XML-файлы, которые мне нужно изменить ... и после всего этого он начинает наносить ущерб целинастроив это меню в общем проекте.Мне нужно было только одно центральное место для управления им, и мне не нужно было устанавливать / настраивать несколько файлов в разных проектах.

...