Доступ к данным в аспекте

Скажем, у меня есть следующая многоуровневая архитектура...

введите здесь описание изображения

Я хочу реализовать аспект, который требует некоторой формы доступа к данным. Каждый из проектов в стеке имеет ссылку на структуру аспекта. Поэтому я не могу сделать так, чтобы сборка аспекта ссылалась на уровень доступа к данным из-за циклических ссылок.

Итак, как я должен выполнять доступ к данным в аспекте?


person Brett Postin    schedule 16.08.2013    source источник
comment
В каком слое(ах) вы собираетесь использовать этот аспект?   -  person Magnus Grindal Bakken    schedule 16.08.2013
comment
@MagnusGrindalBakken На самом деле я нашел решение своей проблемы, но только потому, что этот аспект используется только на уровне обслуживания, что означает, что я могу удалить ссылки из BLL и DAL. Однако мне все еще интересно, как это было бы сделано, если бы аспект требовался всеми слоями, поскольку это сквозная проблема.   -  person Brett Postin    schedule 16.08.2013


Ответы (1)


Это решается с помощью зависимостей во время выполнения.

Наилучшим подходом для этого является шаблон инверсия управления.

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

Ваши аспекты будут взаимодействовать со слоем данных со всеми интерфейсами, а не со ссылками во время разработки, поэтому вы избежите циклических ссылок во время компиляции.

Я хотел бы добавить некоторые пояснения: разрешение зависимостей во время выполнения не является серебряной пулей для создания циклической ссылки, которая позволяет избежать ошибок во время компиляции.

Иногда ваши реализации могут быть частью сборки, которая когда-то упоминалась во время разработки, может заканчиваться циклической ссылкой, но это просто совпадение: она может быть в этой сборке или в сборке только для реализаций. , либо просто сторонняя сборка. Кто знает ;)

person Matías Fidemraizer    schedule 16.08.2013
comment
На самом деле мы уже используем StructureMap и корневую сборку композиции для обработки нашего IoC. У нас также есть интерфейсы в отдельных сборках для каждого слоя, что означает, что мы можем фактически добавлять ссылки обратно из аспекта в сборки интерфейса без циклических ссылок. Спасибо за момент лампочки! - person Brett Postin; 16.08.2013
comment
@BrettPostin Нет проблем, хахаха ;) Приятно, когда кто-то с другого конца Земли думает так же, как ты, не так ли?! - person Matías Fidemraizer; 16.08.2013