Когда создается экземпляр EnterpriseLibraryContainer? - PullRequest
2 голосов
/ 22 февраля 2011

Я пробую Enterprise Library 5.0.Я планирую использовать его для будущего проекта с ASP.Net MVC.Я видел несколько примеров и пробовал регистрацию.В этом примере я вижу, как разработчик получает экземпляр logger через:

LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();

Приведенный выше код хорошо работает в моем приложении.В этом коде, в основном, мы получаем экземпляр из существующего контейнера, верно?Мои вопросы:

  1. Как и когда создается этот экземпляр контейнера?
  2. Могу ли я использовать тот же контейнер в моем MVC?
  3. В чем была идеяиспользуя этот метод для создания контейнера и почему бы не использовать экземпляр EnterpriseLibraryContainer в MVC?

Заранее благодарим вас за комментарии, идеи и решение.

1 Ответ

3 голосов
/ 23 февраля 2011

Контейнер Enterprise Library автоматически создается при первом обращении к нему, если он не был явно инициализирован заранее.

Экземпляр EnterpriseLibrary.Current предназначен для конструкций, которые в противном случае не захотят или не заботятся о контейнере,и просто хочу получить объекты Entlib.Если вы уже используете DI-контейнер (я предполагаю Unity, поскольку вы этого не говорите), то быстрее и проще получить ваши объекты Entlib непосредственно из контейнера, который вы уже используете.

С Unityвсе, что вам нужно сделать, это когда вы создаете контейнер, выполните:

container.AddNewExtension<EnterpriseLibraryCoreExtension>();

и загрузите конфигурацию entlib в контейнер.Оттуда вы можете разрешить объекты Entlib как зависимости так же, как и любые другие зависимости.Таким образом, для приведенного выше кода вы можете получить LogWriter, просто установив параметр конструктора типа LogWriter на своем контроллере.

Я бы не рекомендовал использовать EnterpriseLibraryContainer для всех ваших потребностей IOC в приложении MVC;Я бы сказал, вместо этого используйте явный контейнер, которым вы управляете.

...