Вместо использования @Provides
методов рассмотрим набор типов Provider<A>
, возможно, вложенных в тип A, предоставляя вам доступ к приватному ctor.Или сделайте его защищенным пакетом ctor и поместите провайдеров в тот же пакет, что и он.Или, конечно, вы можете переместить тип вашего модуля в тот же пакет, что и A.
Другой вариант будет AssistedInject , который позволит вам указать набор методов, которые на основепо имени или параметру, будет возвращать разные экземпляры (в вашем случае, вероятно, подтипы A).Я думаю, что у него будет доступ к закрытым конструкторам.
Последняя мысль для вас: почему бы не оставить конструктор открытым как A, чтобы пользователь библиотеки мог вручную вводить зависимости?Если это только для внутреннего использования, документирования ctor также может быть достаточно.