Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?
Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
Здравствуйте, godwizard, Вы писали:
G>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам? G>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
В C++ есть __super keyword. У C# этого нет... =(
Как вариант можно передавать указатель на родителя при инициализации плагина.
Здравствуйте, TSS, Вы писали:
TSS>Здравствуйте, godwizard, Вы писали:
G>>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам? G>>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
TSS>В C++ есть __super keyword. У C# этого нет... =( TSS>Как вариант можно передавать указатель на родителя при инициализации плагина.
Это типа methodeName(Parent prnt);? Или как в интерфейсе указатель на родителя передать?
Здравствуйте, godwizard, Вы писали:
G>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?
Ну ничего не понял. Кто такие интерфейсы и при чем тут плагины?
G>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, godwizard, Вы писали:
G>>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?
AVK>Ну ничего не понял. Кто такие интерфейсы и при чем тут плагины?
G>>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
AVK>Ну так пользуйся.
Я тут примерчик по плагинам прочитал (RSDN Magasine #1) там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс. Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.
Здравствуйте, godwizard, Вы писали:
G>Я тут примерчик по плагинам прочитал (RSDN Magasine #1)
По моему я писал.
G> там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс.
Ну да.
G>Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.
Вынеси эти объекты (или их интерфейсы) в отдельную сборку и сделай на них референс. Теоретически можно сделать референс прямо на ехе-шник, но студия на это ругается.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, godwizard, Вы писали:
G>>Я тут примерчик по плагинам прочитал (RSDN Magasine #1)
AVK>По моему я писал.
G>> там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс.
AVK>Ну да.
G>>Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.
AVK>Вынеси эти объекты (или их интерфейсы) в отдельную сборку и сделай на них референс. Теоретически можно сделать референс прямо на ехе-шник, но студия на это ругается.
А как ты плагины создаешь? Я имею ввиду какой тип Проекта ты выбираешь, Class Library?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, godwizard, Вы писали:
G>>А как ты плагины создаешь? Я имею ввиду какой тип Проекта ты выбираешь, Class Library?
AVK>Конечно
AVK>
Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?
Здравствуйте, godwizard, Вы писали:
G>Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?
Придумать для родителя интерфейс и вынести в другую сборку
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, godwizard, Вы писали:
G>>Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?
AVK>Придумать для родителя интерфейс и вынести в другую сборку
Я тут проблемку эту решил, но вылезла новая : делаю все по примеру, описанному в журнале, но во-первых,
if(typeof(IPluginModule).IsAssignableFrom(t))
почему то игнорирует мой тип, во-вторых, когда я его закоментировал, он мне стал ругаться на
An unhandled exception of type 'System.MissingMethodException' occurred in mscorlib.dll
Additional information: Constructor on type Proman.IPluginModule not found.
G>An unhandled exception of type 'System.MissingMethodException' occurred in mscorlib.dll
G>Additional information: Constructor on type Proman.IPluginModule not found.
G>
Видимо у тебя нет конструктора без параметров. А MissingMethodException обычно вылазит если сборки не перекомпилировать. Сделай в студии Rebuild solution.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, godwizard, Вы писали:
G>>Я тут проблемку эту решил, но вылезла новая : делаю все по примеру, описанному в журнале, но во-первых, G>>
if(typeof(IPluginModule).IsAssignableFrom(t))
почему то игнорирует мой тип, во-вторых, когда я его закоментировал, он мне стал ругаться на
G>>An unhandled exception of type 'System.MissingMethodException' occurred in mscorlib.dll
G>>Additional information: Constructor on type Proman.IPluginModule not found.
G>>
AVK>Видимо у тебя нет конструктора без параметров. А MissingMethodException обычно вылазит если сборки не перекомпилировать. Сделай в студии Rebuild solution.
Есть конструктор без параметров. Может в плагине чего прописать?
Здравствуйте, DarkGray, Вы писали:
DG>Здравствуйте, godwizard, Вы писали:
G>>Есть конструктор без параметров. Может в плагине чего прописать?
DG>А конструктор объявлен как public?
public class fProExplorer : Form, IPluginModule
{
/// <summary>
/// Required designer variable.
/// </summary>
private Container components = null;
public fProExplorer()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
....
DG>Во время ошибки t.FullName == "Proman.IPluginModule", Так?
DG>Тогда все понятно: ты пытаешь создать объект типа интерфейс...
DG>Интерфейс надо пропускать.
DG>
Здравствуйте, DarkGray, Вы писали:
DG>Здравствуйте, godwizard, Вы писали:
G>>В смысле пропускать?
DG>Такое ощущение, что ты перебираешь типы из своей assembly, а не из той где у тебя лежит plugin.
DG>При этом ты при перебирании находишь интерфейс IPluginModule и пытаешь создать объект с типом IPluginModule. Ясно что у тебя ничего не получается.
DG>ps DG> Если у тебя все-таки просто лежат interface и сам plugin в одной ассембли (Да и вообще на будущее), то просто сделай так:
DG>