Проблемы с модификаторами доступа между DLL и циклической зависимостью - PullRequest
0 голосов
/ 08 февраля 2019

Я разрабатываю плагин для Dynamo в C ++ / CLI (.NET), и у меня проблема с видимостью метода.

По сути, Dynamo будет анализировать DLL, и всеоткрытые классы и методы появятся в пользовательском интерфейсе, в то время как закрытые методы и другие методы с атрибутом IsVisibleInDynamo, установленным на false, даже если они объявлены как открытые.

Теперь мы ориентируемся на плагин для двух групп пользователей: конечных пользователей, которые будут использовать плагин только в Dynamo, и разработчиков, которые могут расширить наш плагин для создания другой библиотеки.

В библиотекеУ нас есть набор классов, например, Vertex, и фабрики для создания экземпляров этих классов, например, VertexFactory.Чтобы создать Vertex, необходимо вызвать VertexFactory::Create(...), и его конструктор создаст Vertex.

Класс Vertex, безусловно, должен быть открытым, так как он используетсякак конечные пользователи, так и разработчики, однако VertexFactory должны быть видны только разработчикам.Поэтому я объявляю методы в VertexFactory как публичные, но устанавливаю IsVisibleInDynamo в true.

В настоящее время наш плагин тесно связан с Dynamo, однако я хотел бы разделить плагин на две библиотеки DLL: одну, скажем, PluginNET, не зависит от приложения, так как мы начинаем расширяться на другие приложения;а другой, скажем, PluginDynamo, предоставляет функциональные возможности, связанные с Dynamo.

Фабричные классы должны перейти на PluginNET, однако я сталкиваюсь с проблемой скрытия этих классов от Dynamo, потому что IsVisibleInDynamo Атрибут зависит от Dynamo.

Я думаю о том, чтобы создать еще одну DLL, скажем, PluginFactories, однако я столкнусь с циклической зависимостью, где методы создания в PluginNET, которыесоздаст Vertex и т. д. для обращения к фабричным классам, таким как VertexFactory в PluginFactories, но PluginFactories зависит от фактических конструкторов в PluginNet.

Существует ли более правильный механизм / архитектура ООП, который необходимо скрытьэти классы, и знает ли кто-нибудь лучшую альтернативу для решения этой проблемы?

...