использование Autofac в многоуровневой архитектуре - PullRequest
4 голосов
/ 13 января 2011

Я довольно новичок в концепции DI / IoC и хотел бы использовать Autofac в 3-уровневом приложении ASP.NET Webforms.

  • Уровень пользовательского интерфейса: веб-сайт ASP.NET.
  • BLL: Уровень бизнес-логики, который вызывает хранилища для DAL.
  • DAL: файл .EDMX (EntityModel) и ObjectContext с классами репозитория, которые абстрагируют операции CRUD для каждой сущности.
  • Entities: POCO Entities.Упорство Ignorant.Сгенерировано Microsoft ADO.Net POCO Entity Generator.

Я задал более общий вопрос здесь .По сути, я хотел бы создать obejctcontext для каждого HttpContext в моем DAL.Но я не хочу добавлять ссылку на DAL в пользовательском интерфейсе или получать прямой доступ к HttpContext в DAL.Я предполагаю, что именно здесь инструменты IoC начинают играть.Ответ на мой предыдущий вопрос - очень хороший пример использования Виндзорского замка.Я хотел бы использовать Autofac в качестве инструмента IoC и не знаю, как этого добиться.(Как получить доступ к DAL в application_start для регистрации компонента, в то время как я не хочу ссылаться на него в своем пользовательском интерфейсе, каковы надлежащие ссылки, чтобы иметь возможность использовать компонент DAL в BLL с Autofac, Должен ли я зарегистрировать BLL как компонент с Autofacтоже)

Извините, ребята, что не предоставили четкого вопроса и не запросили какой-то рабочий пример, но я очень незнаком со всей концепцией IoC и не думаю, что смогу достичь ее, чтобы использовать в моем текущемограниченный по времени проект.

1 Ответ

6 голосов
/ 13 января 2011

Модули Autofac - это техника, которую вы ищете: http://code.google.com/p/autofac/wiki/StructuringWithModules

Модуль группирует связанную конфигурацию, например, ваши типы DAL, и может быть загружен в приложение через Web.config: http://code.google.com/p/autofac/wiki/XmlConfiguration#Modules

Это позволит избежать жестких ссылок между вашим веб-приложением и DAL.

Если вы хотите регистрировать компоненты DAL для каждого запроса, используйте модификатор InstancePerLifetimeScope().Это будет работать так же, как InstancePerHttpRequest(), если только вы не настроите иерархию времени жизни в своем приложении (маловероятно.)

Удачи с ним!

Ник

...