Сделать классы и объекты "main-project" известными "plugin-project" в C#

У меня есть приложение, и я хочу, чтобы другие могли написать плагины для этого приложения. Мой первый подход был такой:

Создание простого механизма плагинов

Мне также нужно получить доступ к классам и объектам основного приложения из моего плагина. В настоящее время я делаю это, добавив весь MyApplication.exe в качестве ссылки в Plugin-Project, а затем ссылку "используя MyApplication;".

Есть ли лучший способ достичь этой функциональности? Как я могу использовать объекты и т. Д. Из моего основного приложения в проекте плагина, не ссылаясь на все приложение?

На самом деле я не хочу отделять целые классы от моего основного приложения в своей собственной dll. Могу ли я создать что-то вроде "dummy-dll", который только делает объекты и т. Д. Для плагина-проекта известными без полной реализации в нем? Основная реализация должна оставаться в основном приложении, и мне нужно только то, что я могу ссылаться на объекты и т. Д. Из основного приложения в моем проекте плагина.


Обновить:

Я уже пробовал следующие варианты:

  • Каждый класс, который должен быть доступен в проекте плагина, изменен на частичные классы. Затем я создал новый проект библиотеки классов и добавил копию этих частичных классов, удалил детальную реализацию и создал dll. Я добавил dll в плагин-проект. Классы были теперь доступны, но когда я запустил свое основное приложение, появилось "FileNotFoundException", в котором говорилось, что файл или сборка не найдены.

  • Создан новый проект с интерфейсом для каждого класса, который должен быть доступен в проекте плагина. Проблема заключается в том, что один из классов, представленных через интерфейс, является абстрактным (и должен оставаться абстрактным), и в этом классе создается новый экземпляр другого класса, на который также ссылается новый "интерфейсный проект". Но в C# невозможно добавить конструктор к интерфейсу. Поэтому я всегда получаю сообщение об ошибке, если я хочу ссылаться на метод этого абстрактного класса через интерфейс в проекте плагина.

Есть ли у кого-нибудь простое объяснение для меня, как я могу получить доступ к объектам / классам mainApplication в проекте плагина?

1 ответ

Создайте отдельный проект, который является библиотекой классов (поэтому он компилируется в DLL). Теперь для каждого объекта / класса из основного проекта, к которому вы хотите получить доступ, создайте интерфейс и добавьте его в этот проект. Теперь плагину нужно только сослаться на интерфейсный проект (dll), чтобы узнать, как выглядят ваши классы.

Другие вопросы по тегам