Nuspec: могу ли я иметь сборку в качестве зависимости, но указать Visual Studio НЕ ссылаться на нее?

Я разрабатываю набор сборок, содержащих классы, которые, используя структуру внедрения зависимостей, должны создаваться только классом «InstanceProvider» — в основном это мой шлюз к GetInstance() SimpleInjector. Затем я упаковываю эти сборки в пакет nuget.

Моя цель — добиться того, чтобы разработчик

var myDuck = InstanceProvider.GetInstance<IDuck>();

и не делает

var myDuck = new Duck();

Для этого я должен избегать ссылок на некоторые сборки, содержащие конкретные реализации. Но мне все равно нужно, чтобы они были там.

Так что на данный момент они у меня есть как зависимости в моем пакете nuget. Я ищу способ сохранить их там, но когда разработчик использует пакет для своего проекта, на некоторые сборки не следует ссылаться напрямую в своей визуальной студии. проект.

Это вообще возможно?


person Jim Andrakakis    schedule 05.10.2018    source источник


Ответы (2)


Nuspec: могу ли я иметь сборку в качестве зависимости, но указать Visual Studio НЕ ссылаться на нее?

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

<file src="\*.dll" target="content\" />

<file src="\*.dll" target="Tools\" />

Проверьте Создание файла . nuspec для более подробной информации.

Таким образом, эти сборки включены в пакет nuget, но эти сборки не будут напрямую ссылаться на проект при использовании пакета nuget.

Надеюсь это поможет.

person Leo Liu-MSFT    schedule 10.10.2018
comment
Спасибо, это в значительной степени покрывает это. Прежде чем я нажму кнопку «Принять», еще один вопрос: есть ли способ сделать это, скажем, более интегрированным с Visual Studio? Как (это, вероятно, не работает, но просто в качестве примера) установка ссылки для локального копирования в false? Причина, по которой я спрашиваю, заключается в том, что я хотел бы избежать возни с файлом nuspec; об этом забывают при изменении вещей. - person Jim Andrakakis; 10.10.2018
comment
@JimAndrakakis, да, вы можете сделать это с файлом .targets. Но это немного сложно, для получения более подробной информации, пожалуйста, проверьте мою другую тему: stackoverflow.com/questions/44747744/ - person Leo Liu-MSFT; 11.10.2018

Общий ответ вы можете, но вам не следует беспокоиться об этом, пока вам действительно не понадобится разработать систему с поддержкой «плагинов». Это усложняет отладку.

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

Существует множество инструментов DI, которые могут это сделать, например. Единство. Используемая ими технология: вы настраиваете контейнер в файле xml, который не требует ссылки. Затем контейнер ищет сборки и загружает их.

person Roman Pokrovskij    schedule 06.10.2018