Недавно, я написал небольшую надстройку над 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"/>#полезное #tips