Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 12:34
Оценка:
Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?
Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.
Best regards
Re: Родитель в Плагинах
От: TSS Россия http://www.sdl.ru
Дата: 19.12.02 12:40
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?

G>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.

В C++ есть __super keyword. У C# этого нет... =(
Как вариант можно передавать указатель на родителя при инициализации плагина.
Signed, [TSS] /SDL/
Re[2]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 12:50
Оценка:
Здравствуйте, TSS, Вы писали:

TSS>Здравствуйте, godwizard, Вы писали:


G>>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?

G>>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.

TSS>В C++ есть __super keyword. У C# этого нет... =(

TSS>Как вариант можно передавать указатель на родителя при инициализации плагина.

Это типа methodeName(Parent prnt);? Или как в интерфейсе указатель на родителя передать?
Best regards
Re: Родитель в Плагинах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.02 12:53
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?


Ну ничего не понял. Кто такие интерфейсы и при чем тут плагины?

G>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.


Ну так пользуйся.
... << RSDN@Home 1.0 beta 3 (developer build)>>
AVK Blog
Re[2]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 12:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, godwizard, Вы писали:


G>>Как в C# при написании интерфейса для плагина описать своиства или методы для доступа к родительским объектам?


AVK>Ну ничего не понял. Кто такие интерфейсы и при чем тут плагины?


G>>Т.е. у меня есть некое ядро, в котором есть объекты или функции и я хочу в плагинах ими пользоваться.


AVK>Ну так пользуйся.


Я тут примерчик по плагинам прочитал (RSDN Magasine #1) там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс. Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.
Best regards
Re[3]: Родитель в Плагинах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.02 13:07
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Я тут примерчик по плагинам прочитал (RSDN Magasine #1)


По моему я писал.

G> там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс.


Ну да.

G>Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.


Вынеси эти объекты (или их интерфейсы) в отдельную сборку и сделай на них референс. Теоретически можно сделать референс прямо на ехе-шник, но студия на это ругается.
... << RSDN@Home 1.0 beta 3 (developer build)>>
AVK Blog
Re[4]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 13:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, godwizard, Вы писали:


G>>Я тут примерчик по плагинам прочитал (RSDN Magasine #1)


AVK>По моему я писал.


G>> там написано, что можно написать интерфейс для плагина, потом писать плагины, имплементируя интерфейс.


AVK>Ну да.


G>>Я так и начал делать. Но у меня в основной программе у меня есть объекты, котрые хочется использовать в плагинах.


AVK>Вынеси эти объекты (или их интерфейсы) в отдельную сборку и сделай на них референс. Теоретически можно сделать референс прямо на ехе-шник, но студия на это ругается.


А как ты плагины создаешь? Я имею ввиду какой тип Проекта ты выбираешь, Class Library?
Best regards
Re[5]: Родитель в Плагинах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.02 13:31
Оценка:
Здравствуйте, godwizard, Вы писали:

G>А как ты плагины создаешь? Я имею ввиду какой тип Проекта ты выбираешь, Class Library?


Конечно
... << RSDN@Home 1.0 beta 3 (developer build)>>
AVK Blog
Re[6]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 13:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, godwizard, Вы писали:


G>>А как ты плагины создаешь? Я имею ввиду какой тип Проекта ты выбираешь, Class Library?


AVK>Конечно


AVK>


Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?
Best regards
Re[7]: Родитель в Плагинах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.02 14:05
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?


Придумать для родителя интерфейс и вынести в другую сборку
... << RSDN@Home 1.0 beta 3 (developer build)>>
AVK Blog
Re[8]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 14:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, godwizard, Вы писали:


G>>Вот еще тогда такой вопрос. Я плагины хочу перебирать добавлять в меню. У меня MDI приложение и плагины — это дочерние окна. Я в интерфейсе указываю метод выбора пункта меню и в плагине я должен указать MdiParent. Как мне родителя передать? Exe-шник основной референсить?


AVK>Придумать для родителя интерфейс и вынести в другую сборку


Я тут проблемку эту решил, но вылезла новая : делаю все по примеру, описанному в журнале, но во-первых,
if(typeof(IPluginModule).IsAssignableFrom(t))
почему то игнорирует мой тип, во-вторых, когда я его закоментировал, он мне стал ругаться на
IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);
Выдает:


An unhandled exception of type 'System.MissingMethodException' occurred in mscorlib.dll

Additional information: Constructor on type Proman.IPluginModule not found.
Best regards
Re[9]: Родитель в Плагинах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.02 15:37
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Я тут проблемку эту решил, но вылезла новая : делаю все по примеру, описанному в журнале, но во-первых,

G>
if(typeof(IPluginModule).IsAssignableFrom(t))
почему то игнорирует мой тип, во-вторых, когда я его закоментировал, он мне стал ругаться на
IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);
Выдает:


G>

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.
... << RSDN@Home 1.0 beta 3 (np: тихо) >>
AVK Blog
Re[10]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 15:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, godwizard, Вы писали:


G>>Я тут проблемку эту решил, но вылезла новая : делаю все по примеру, описанному в журнале, но во-первых,

G>>
if(typeof(IPluginModule).IsAssignableFrom(t))
почему то игнорирует мой тип, во-вторых, когда я его закоментировал, он мне стал ругаться на
IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);
Выдает:


G>>

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.


Есть конструктор без параметров. Может в плагине чего прописать?

public interface IPluginModule
{
        string getName();
    string getCaption();
    string getDescription();
    void MenuEventSelected(object sender, System.EventArgs e);
    void setParent(System.Windows.Forms.Form fParent);
}
Best regards
Re[11]: Родитель в Плагинах
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.12.02 16:01
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Есть конструктор без параметров. Может в плагине чего прописать?


А конструктор объявлен как public?
... << RSDN@Home 1.0 beta 3 >>
Re[12]: Родитель в Плагинах
От: godwizard Россия  
Дата: 19.12.02 16:10
Оценка:
Здравствуйте, 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
            //
        }
....
Best regards
Re[10]: Родитель в Плагинах
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.12.02 16:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);


Во время ошибки t.FullName == "Proman.IPluginModule", Так?

Тогда все понятно: ты пытаешь создать объект типа интерфейс...

Интерфейс надо пропускать.
... << RSDN@Home 1.0 beta 3 >>
Re[11]: Родитель в Плагинах
От: godwizard Россия  
Дата: 20.12.02 05:52
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Здравствуйте, AndrewVK, Вы писали:


DG>
IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);


DG>Во время ошибки t.FullName == "Proman.IPluginModule", Так?


DG>Тогда все понятно: ты пытаешь создать объект типа интерфейс...


DG>Интерфейс надо пропускать.


DG>


В смысле пропускать?
Best regards
Re[12]: Родитель в Плагинах
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.02 09:40
Оценка:
Здравствуйте, godwizard, Вы писали:

G>В смысле пропускать?


Такое ощущение, что ты перебираешь типы из своей assembly, а не из той где у тебя лежит plugin.

При этом ты при перебирании находишь интерфейс IPluginModule и пытаешь создать объект с типом IPluginModule. Ясно что у тебя ничего не получается.

ps
Если у тебя все-таки просто лежат interface и сам plugin в одной ассембли (Да и вообще на будущее), то просто сделай так:

if(typeof(IPluginModule).IsAssignableFrom(t) && !t.IsAbstract)
  IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName);
... << RSDN@Home 1.0 beta 3 >>
Re[13]: Родитель в Плагинах
От: godwizard Россия  
Дата: 20.12.02 11:13
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Здравствуйте, godwizard, Вы писали:


G>>В смысле пропускать?


DG>Такое ощущение, что ты перебираешь типы из своей assembly, а не из той где у тебя лежит plugin.


DG>При этом ты при перебирании находишь интерфейс IPluginModule и пытаешь создать объект с типом IPluginModule. Ясно что у тебя ничего не получается.


DG>ps

DG> Если у тебя все-таки просто лежат interface и сам plugin в одной ассембли (Да и вообще на будущее), то просто сделай так:

DG>
DG>if(typeof(IPluginModule).IsAssignableFrom(t) && !t.IsAbstract)
DG>  IPluginModule pm = (IPluginModule)asm.CreateInstance(t.FullName); 
DG>


DG>


Сделал все как ты написал, все равно где идет проверка
if(typeof(IPluginModule).IsAssignableFrom(t) && !t.IsAbstract)

и в дебаге вижу что t = Proman.IPluginModule, почему то игнорируется
Best regards
Re[14]: Родитель в Плагинах
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 20.12.02 11:20
Оценка:
Здравствуйте, godwizard, Вы писали:

G>Сделал все как ты написал, все равно где идет проверка

G>
G>if(typeof(IPluginModule).IsAssignableFrom(t) && !t.IsAbstract)
G>

G>и в дебаге вижу что t = Proman.IPluginModule, почему то игнорируется

Интерфейс как раз и должен игнорироваться, должны находится только классы, которые реализовывают этот интерфейс.

Почему у тебя не находятся классы? — Имхо, потому что ты ищешь их не в той сборке.
... << RSDN@Home 1.0 beta 3 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.