![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| greyc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.9.2007 Репутация: нет Всего: нет |
Ножно создать plugin на C#. Подскажите как сделать простенький плагин, или пример какого-нибудь плагина. Помогите пожалуйста!!!
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
greyc, плагин к чему?
-------------------- СУВ, Partizan. |
|||
|
||||
| archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Рефлекшином подтягиваешь сборку, вытягиваешь нужные тебе интерфейсы - вызываешь соотв. методы. Кажись были какие-то либы для этого
-------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
А можно заюзать IoC контейнер, например Castle Project (MicroKernel или Windsor), или другие контейнеры.
Это сообщение отредактировал(а) Linus - 27.2.2009, 10:00 |
|||
|
||||
| greyc |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.9.2007 Репутация: нет Всего: нет |
к клиенту, написанному на с#. Добавлено через 2 минуты и 38 секунд
а как это сделать, можт есть ссылки на хорошую теорию по этому? нет примерчика простенького? |
||||
|
|||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
greyc, если клиент поддерживает плагины, значит у него должен быть какой-то открытый API для написания плагинов
-------------------- СУВ, Partizan. |
|||
|
||||
| -Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Если клиент на С# написан тобой, то объявляй интерфейсы.
Ты не сказал что ты пишешь, поэтому я возьму, например, калькулятор. Конечно калькулятор, поддерживающий плигины, это что-то, но смысл думаю будет понятен. Итак, в программе у тебя есть классы, которые отвечают за вычисления. Один класс - один тип вычисления. Все они имеют одинаковый интерфейс:
Сразу видно, что при такой реализации калькулятора, дополнительные типы вычислений будут добавлятся путем написания наследников от ICalc. Теперь надо выделить ICalc в отдельную сборку (PluginBase.dll), чтобы другие плагины могли иметь к ней доступ. После этого, мы можем писать сколько угодно dll'ок, которые будут содержать классы наследумые от ICalc, находящийся в PluginBase.dll Далее. При загрузке калькулятора проводим сканирование папки на предмет поиска реализации интерфейса ICalc и загружаем:
Метод LoadPlugins вернет список уже созданных объектов-наследников ICalc, из всех dll в указаной папке. Ну а дальше уже дело техники. Можно, например, сделать так:
Надеюсь этот простой пример поможет вам. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
| greyc |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.9.2007 Репутация: нет Всего: нет |
клиента надо мне написать. Клиента, что бы поддерживал все основные функции Subversion (svn). есть уже готовые такие клиенты http://sharpsvn.open.collab.net/ мне надо катого же, только немного модернизированного Добавлено через 2 минуты и 6 секунд
Большое спасобо за помощь) а то не понятно было с чего начинать!) |
||||||||||
|
|||||||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
в представленном примере есть большие проблемы (если переносить его будете на промышленное производство).
1) надо проверять на .net сборку хотябы (я не говорю про валидность самого файла хотябы), например так:
2) нужно грузить предварительно сборку в другой домен, т.к. она будет висеть в примере в памяти, и выгрузить ее не удасться "законно" (подробнее гугл расскажет по словам CreateInstanceAndUnwrap, AppDomain.CreateDomain) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
jonie, спасибо за коррективы. Просто я не претендовал на промышленный вариант, а только лишь показать общий принцип. Тем не менее, спасибо за код проверки IsAssembly, я никогда об этом на задумывался полагаясь на Exception.
Был бы Вам благодарен, если б вы пояснили, что находится по указанным в коде смещениям и константы 120, 14 и 8:
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |