Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модульное построение программы, с динамическим подключением модулей 
V
    Опции темы
kulibin
Дата 17.6.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Долго и нудно копался в нете. везде дебри всякие да тонкости. а мне просто нужно - основы. Ситуация такая: есть базовый абстрактный класс BaseModule. Внём там формы и прочая начинка. Есть много реализаций. Есть Основная программа которая сознаёт объекты класса BaseModule и на основе базового класса работает с теми методами/свойствами, что есть в нём - больше ничего и не нужно. Всё это уже есть и нормально работает. Не хватает только одного - чтобы эти модули динамически подключались/отключались. Ну загрузить как сборку я в курсе - систем.рефлекшн, ассембли.лоэд - что-то такое. Ну а потом чего с ассембли этой делать? Мне нужно создать инстенс класса BaseModul который является базовым для всех реализаций классов модулей этих. Да - конструктор там с параметрами - передаётся коннекшн к бд и родительская форма - остальным (тем что в модуле) она будет мдипеарент. Я чуйствую что не хватает тут самой малости - может одной строчки - но никак не пойму что конкретно. Помогите плз двоечнику smile 
PM MAIL WWW ICQ   Вверх
Хоббит
Дата 17.6.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



читал. не понял.

Ты что хочешь подключить библиотеку и создать объект из нее?
И как ты умудрился создать экземпляр абстрактного класса (если я верно прочитал "....абстрактный класс BaseModule....которая сознаёт объекты класса BaseModule")? вроде вчера еще нельзя было 
PM MAIL   Вверх
Void
Дата 17.6.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



kulibin, получаешь Type с помощью Assembly.GetType и создаешь экземпляр с помощью Activator.CreateInstance. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
kulibin
Дата 18.6.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Что-то заглючила ассембли.лоэд. Файл длл сам на месте. Не пойму чего не хватает. Вот код:
Код

string[] ModNames ={ "DirtyWords" };
Modules = new BaseModule[ModNames.Length];
Assembly a;
foreach(string s in ModNames)
{
       a = Assembly.Load(Application.StartupPath+"\\"+ s+".dll");
//говорит либо путь не найден - либо фиг его знает что ещё. С путём точно всё нормально.
       Type t = a.GetType(s);
       Modules[Modules.Length] = (BaseModule)Activator.CreateInstance(t,new object[]{con,usr,this});
}
 
PM MAIL WWW ICQ   Вверх
kulibin
Дата 18.6.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Блин - я гоню: я ассемблинейм с .длл не знаю зачем написал - на это и ругалось.
вобщем фунциклирует. Если кто такое будет делать там ещё название тайпа должно включать неймспейс. Вот рабочий вариант:
Код

 string[] ModNames ={ "DirtyWords" };
Modules = new BaseModule[ModNames.Length];
Assembly a;
foreach(string s in ModNames)
{
a = Assembly.Load(s);
Type t = a.GetType(s+"."+s,true);
Modules[Modules.Length-1] = (BaseModule)Activator.CreateInstance(t, new object[] { con, usr, this });
}
 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 19.6.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



З.Ы. kulibin, если грузим сборку из файла, то лучше юзать не Assembly.Load а Assembly.LoadFrom(полный_путь). 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.