Как скрыть от потребителя библиотеки лишние зависимости?
Недавно, я написал небольшую надстройку над AutoFixture, которая позволяет при создании объекта базового абстрактного класса получить экземпляр случайного наследника.
Допустим, у нас есть подобная иерархия:
Если написать
Ожидается, что мы получим случайным образом либо
Однако, базовый функционал библиотеки не даёт такого поведения из коробки.
С помощью моего NuGet пакета можно настроить
Так вот при создании библиотеки возникла проблема.
В связи с тем, что она создана как дополнение к AutoFixture, присутствует зависимость, которая потом попадает к потребителю в раздел Implicitly Installed Packages.
Согласитесь, неприятно.
Решается проблема очень просто, достаточно пометить зависимость атрибутом
Недавно, я написал небольшую надстройку над AutoFixture, которая позволяет при создании объекта базового абстрактного класса получить экземпляр случайного наследника.
Допустим, у нас есть подобная иерархия:
abstract class A { }
class B : A { }
class C : A { }
Если написать
fixture.Create<A>()
, то мы получим исключение, поскольку вызывать new для абстрактных классов запрещено.Ожидается, что мы получим случайным образом либо
new B()
, либо new C()
.Однако, базовый функционал библиотеки не даёт такого поведения из коробки.
С помощью моего NuGet пакета можно настроить
fixture
таким образом, и всё заработает:
fixture.CustomizePolymorphism<A>()
.WithDerivedType<B>()
.WithDerivedType<C>()
.BuildCustomization();
Так вот при создании библиотеки возникла проблема.
В связи с тем, что она создана как дополнение к AutoFixture, присутствует зависимость, которая потом попадает к потребителю в раздел Implicitly Installed Packages.
Согласитесь, неприятно.
Решается проблема очень просто, достаточно пометить зависимость атрибутом
PrivateAssets
со значением all
в конфигурации файла проекта:
<PackageReference Include="AutoFixture" Version="4.18.0" PrivateAssets="all"/>