![Разница между модулем и плагином в Petrel Ocean](https://rvso.com/image/1331463/%D0%A0%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%BC%20%D0%B8%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%BE%D0%BC%20%D0%B2%20Petrel%20Ocean.png)
Я только сейчас начал знакомиться с Petrel Ocean, и мне интересно, в чем разница между плагином и модулем.
По крайней мере, сейчас они выглядят одинаково.
Может ли кто-нибудь дать мне какие-нибудь идеи?
решение1
Класс Plugin содержит свойства, которые обеспечивают идентификацию плагина и используются менеджером плагинов. Плагин содержит все модули в IEnumerable Modules. Интерфейс IModule определяет методы фаз жизненного цикла модуля. Во время запуска Petrel ядро Ocean Core будет загружать модули, как определено в файле конфигурации менеджером плагинов на основе класса Plugin.
решение2
Плагин новый, IModule старый.
Менеджер плагинов работает с плагинами, поэтому вам следует использовать именно его.
решение3
Если вы планируете развернуть свой плагин через Ocean Store, то вам потребуется наследовать от класса Plugin. Конечно, ваш плагин ДОЛЖЕН также реализовывать IModule, поскольку именно там находятся методы, управляющие жизненным циклом.
решение4
Plugin
является объединяющей сущностью для IModule
, т.е. один плагин Ocean может состоять из нескольких модулей, каждый из которых лицензируется отдельно.
Plugin
содержит дополнительную информацию - Author
, Contact
, PluginUri
, которая помогает Petrel лучше информировать пользователей, когда плагин вызывает проблему (например, необработанное исключение). Кстати, Plugin
является только информационным контейнером, так как не содержит никаких методов для переопределения.
Plugin
позволяет объявить Dependencies
, чтобы определить порядок загрузки подключаемых модулей Ocean в Petrel.
И наконец, плагин Ocean с Plugin
классом, определенным и упакованным как PIP, содержит метафайл в формате XML со всеми свойствами Plugin
, позволяющими Petrel проверять определенные условия заранее, без фактической установки. Примером является AppVersion
свойство, которое определяет версию хост-приложения (например, Petrel), с которым скомпилированы эти плагины.