Как открыть статический класс в плагине, не распространяя сборку и полный MSIL для этого класса? - PullRequest
0 голосов
/ 07 февраля 2012

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

Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 07 февраля 2012

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

0 голосов
/ 07 февраля 2012

Вы можете обернуть его внутри класса, который реализует IFactoryThing, таким образом, клиентский код вместо этого будет вызывать этот интерфейс.

Тем не менее вам придется распространять свой код.

0 голосов
/ 07 февраля 2012

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

Лучший вариант, если вам нужно поделиться своим кодом, это на самом деле поделиться кодом.

0 голосов
/ 07 февраля 2012

Вы можете использовать ILMerge , чтобы объединить сборку / сборки для завода с таковыми для вашего программного обеспечения.Кроме этого ... вам нужно где-то поместить код для фабрики, и если это .NET, это означает распространение сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...