Здравствуйте, 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 для дальнейшего использования
}