Интерфейсы, бизнес-логика и global.asax с Autofac

Вопрос:

Я пытаюсь понять, как разделение должно работать с ASP.NET и инъекцией зависимостей.

У меня есть четыре проекта:

  • Клиент ASP.NET
  • Класс BusinessLogic lib (BL)
  • Интеграционный класс lib, вызывающий служебные ссылки
  • Общие (интерфейсы, модели)

В Integration у меня есть репозиторий, который вызывает другие службы. Репозиторий «MyRepository» реализует интерфейс «IMyRepository», который помещается в Shared и возвращает объекты, которые также помещаются в Shared.

Строго говоря, мне бы не хотелось, чтобы ссылка/зависимость от Клиента к проекту интеграции, но всякое общение должно происходить через BL.

В Client Global.asax я регистрирую свои типы с помощью Autofac

var builder = new ContainerBuilder();
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<MyRepository>().As<IMyRepository>().InstancePerHttpRequest();

Однако для этого требуется, чтобы Клиент-проект ссылался на Integration-проект для реализации MyRepository. Должно быть так?

Как я могу не иметь ссылку от клиента на интеграцию и сохранить чистоту разделения?

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

Спасибо за ваше время!

Лучший ответ:

Мой обычный подход:

  1. Определите способ обнаружения типов в каждой отдельной сборке. Самый простой подход (если вы не возражаете ссылаться на Autofac в каждом) заключается в том, чтобы поместить Module Autofac в каждую сборку. Если вам это не нравится, вы можете определить свою собственную абстракцию обнаружения (например, атрибуты, подобные MEF).

  2. Откройте все сборки. Самый простой способ — сканировать папку bin, но вы можете использовать некоторую настраиваемую конфигурацию. Я не проверял последние версии Autofac, добавляя что-либо в терминах обнаружения модуля, но ранее я делал это вручную.

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

Оцените статью
TechArks.Ru
Добавить комментарий