Как получить отладку в Visual Studio 2008 при использовании внедрения зависимостей? - PullRequest
3 голосов
/ 08 января 2010

Каковы лучшие практики обеспечения бесперебойной отладки в Visual Studio 2008 при использовании внедрения зависимостей (DI)?

В частности, предположим, у меня есть решение с 3 проектами:

MySolution: - ConsoleApp - ServiceInterface - ConcreteService

ConsoleApp имеет ссылку на проект ServiceInterface и использует DI-контейнер для разрешения конкретного типа (из проекта ConcreteService).

Когда я начну отладку, ConsoleApp не сможет загрузить конкретный тип, если в каталоге ConsoleApp bin \ debug нет файла ConcreteService.dll.

Итак, вопрос в том, как я могу получить ConcreteService.dll в папку bin \ debug ConsoleApp?

Некоторые варианты, о которых я подумал, - это сценарий после сборки, добавляющий ссылку на проект в ConsoleApp в ConcreteService и копирующий dll вручную.

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

Ответы [ 2 ]

3 голосов
/ 08 января 2010

Просто добавьте ссылку на конкретную реализацию.

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

2 голосов
/ 08 января 2010

Вы можете изменить выходной каталог каждого проекта на один и тот же каталог. Я использовал MySolution \ Debug для отладки проектов DI, чтобы избежать добавления ссылок.

Обращаясь к первому комментарию

Что если у вас есть несколько приложений, которые используют DI для получения одинаковых зависимостей? Например, если у меня есть общий уровень доступа к данным, используемый несколькими приложениями?

Скорее всего, все в одну папку отладки для решения проблемы. Вы будете отлаживать только одно приложение за раз, и пока вы тестируете свою сборку Release, все будет в порядке.

Вы также можете создать различные конфигурации сборки для различных приложений в вашем решении и установить для выходных папок значение MySolution \ ConfigurationXDebug (или что-то подобное) для каждой конфигурации. Это дает дополнительное преимущество, когда вы можете явно выбрать создание соответствующих проектов, но это еще не все, что нужно настроить.

...