Re[2]: Reflection (наверно)
От: Codechanger Россия  
Дата: 18.10.05 17:38
Оценка:
Здравствуйте, stasukas, Вы писали:

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


G>>Есть приложение которое имеет поддержку pluginов

G>>все плагины лежат в одной папке с исполняем файлом
G>>как вы догадались в этой папке есть много не нужных библиотек
G>>+ даже в нужных сборках помимо нужных типов содержиться можество не нужных
S>[Skipped]

G>>что плохо:

G>>Грузяться все без исключения библиотеки ...
S>Для этого создаются конфигурационные файлы, в которых отмечаешь, что хочешь загрузить.

S>Если отталкиваешься от библиотек, то перечисляешь библиотеки на загрузку. Если отталкиваешься от классов, то классы.


S>Если необходимо динамически при каждой загрузке программы подгружать новые библиотеки/классы, то перечисляешь новые и спрашиваешь у пользователя, грузить их в дальнейшем или нет. После этого сохраняешь в конфигурационном файле список полностью, чтоб знать, какие новые библиотеки появились.


S>[Skipped]

Я когда-то писал так:
public void InitializePlugins()
{
Libs=new ArrayList();
Directory.SetCurrentDirectory(Dir+"Plugins\\");//Получаем все файлы в директории с определенным расширением
string[]Files=Directory.GetFiles(Dir+"Plugins\\","*.dll");
ObjectHandle obj=null;
foreach (string Name in Files)
{
try
{
obj=Activator.CreateInstanceFrom(Name,"Razbor.Parser");//Тут создаем инстанс нужный
}
catch(System.Exception e)
{
string t=e.Message;
obj=null;
}
finally
{

}
if(obj is IPlugin) //тут проверяем наличие у инстанца нужного интерфейса
{

IPlugin Plugin=(IPlugin) obj.Unwrap();//Тут развертываем инстанс в нужный тип объекта
Libs.Add(Plugin);//Кладем в ArrayList для дальнейшего использования
}

}
}
Можно и по-другому. У меня довольно громоздко
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.