развертывание global.asax на sharepoint 2010 в корпоративной среде для включения единого контейнера DI - PullRequest
4 голосов
/ 22 июня 2011

Работая над проектом SharePoint, я пытаюсь использовать Unity в качестве контейнера внедрения зависимостей.

Моя первая идея запустить этот контейнер - использовать global.asax, как описано в рекомендациях P & P:

http://webclientguidance.codeplex.com/releases/view/17134#DownloadId=43305

В этих рекомендациях рекомендуется вручную редактировать файл global.asax, чтобы он наследовал SPUnityHttpApplication.

<%@ Application Language="C#" Inherits="Unity.SharePoint.SPUnityHttpApplication" %>

Редактирование этого файла вручную невозможно в корпоративных средах, так как у нас есть несколько сред (DTAP), и у всех них есть несколько внешних серверов, которые требуют ручных действий.

Я не могу найти способ развернуть файл global.asax с помощью функции или wsp или чего-либо еще, потому что global.asax находится в корне веб-приложения, а sharepoint развертывает другие файлы в папке куста / 14, чтобы вы могли не удается получить доступ к корневому каталогу веб-приложения.

Альтернативы, которые я рассмотрел, - SharePointServiceLocator . эта функциональность делает почти то, что я хочу. но он может разрешать только те классы, которые имеют конструктор по умолчанию. таким образом, я не могу по цепочке разрешить все мои реализации, используя инъекцию конструктора. Я нашел сообщение о том, как изменить указатель службы, чтобы использовать единство, но, кажется, это не работает должным образом, если вы читаете комментарии.

Мою проблему можно исправить, исправив 1 из этих 2 основных проблем:

  • Не устраивайте единство в global.asax, но тогда где и как?
  • Развернуть global.asax в sharepoint? возможно?

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

global.asax, похоже, не является лучшим решением для этого из-за проблем развертывания, описанных в вопросе.

Жизнеспособное решение реализует это в httpmodule

Метод init можно использовать для подключения всего, так как он вызывается при запуске приложения sharepoint.

модуль http может быть добавлен в web.config получателем функции

Таким образом, нет необходимости выполнять трюки с global.asax, расположенным вкаталог, в который нельзя развернуть функцию, и у вас есть все функции и правильное время для создания экземпляра контейнера DI.

1 голос
/ 22 июня 2011

Это может быть не идеально, но вы можете посмотреть на использование приемника функций и написать код для непосредственного редактирования существующих файлов.

...