Циркулярная ссылка между сборками в C # и Visual Studio 2005 (снова ...) - PullRequest
0 голосов
/ 29 мая 2009

Пожалуйста, сначала прочитайте следующую ветку:

Циркулярная ссылка между сборками в C # и Visual Studio 2005

Реализация интерфейсов решает мою проблему, но не выполняет мою цель.

Моя цель - работать только с BO-слоем / сборкой из UI-слоя / сборки. Так что я могу поддерживать чистую ссылку слой за слоем.

Coz Я не хочу, чтобы ссылка добавлялась как для BO-слоя / сборки, так и для ORMapper-layer / Assembly в пользовательском интерфейсе слоя / сборки.

Я хочу работать только с BO-слоем / сборкой из UI-слоя / сборки.

Тем временем кто-то предложил мне, что это возможно только при использовании Reflection, а не DI. Это правда?

1 Ответ

0 голосов
/ 29 мая 2009

Если вы действительно настаиваете на том, чтобы скрыть слой ORM за слоем BO, то Dependency Injection все равно сможет вам помочь. Обратите внимание, что вы не сможете избежать ссылки на библиотеку DI из вашего потока пользовательского интерфейса, потому что именно отсюда будут поступать ваши бизнес-объекты.

Подход:

  • Создание интерфейса, который содержит методы для загрузки данных для заполнения User объектов
  • Реализация этого интерфейса в вашем проекте ORM
  • При запуске зарегистрируйте реализацию ORM для интерфейса, используя какой-либо DI-контейнер (прочитайте подробности о любой используемой вами DI-библиотеке, например, www.ninject.org, чтобы узнать что-нибудь более легкое)
  • Дайте объекту User конструктор, который принимает экземпляр интерфейса заполнения для загрузки данных из

Затем, когда вам нужен объект User, вы просите библиотеку DI создать его, и библиотека DI создаст User и даст ему ссылку на реализацию ORM. Вам нужно будет ввести некоторые свойства в вызов DI, чтобы «имя пользователя» и «пароль» могли полностью заполнить его значениями.

Обратите внимание, что это не совсем то, для чего был изобретен DI ... Код приложения действительно должен иметь дело с ORM напрямую для создания / чтения / обновления / удаления бизнес-объектов.

...