Подгрузка классов из сторонних библиотек в рантайме

Я тут решил в одном своем рабочем проекте реализовать плагины.

Дальше небольшой пример кода, как это делать на C#

Для этого нам понадобится новый проект winForms c одной единственной формочкой на которой есть одна кнопка и OpenFileDialog

private void Button1Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() != DialogResult.OK) return;

//Загружаем стороннюю библиотеку
var assembly = Assembly.LoadFrom(openFileDialog1.FileName);

//Получаем перечень атрибутов
object[] attributes = assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);

//Получаем перечень доступных классов
object[] types = assembly.GetExportedTypes();

//Загружаем первый попавшийся клас, вообще тут должна быть маленькая магия
if (types.Length > 0)
{
var instanceOfMyType = Activator.CreateInstance((System.Type)types[0],
new object[]
{
"Тут находится параметр конструктора"
});
foreach (object attribute in attributes)
{
Console.WriteLine("Attribute = {0}", ((AssemblyTitleAttribute)attribute).Title);
}
foreach (object type in types)
{
Console.WriteLine("Type = {0}", ((System.Type)type).FullName);
}
Console.WriteLine("Instance of {0}",instanceOfMyType.GetType().FullName);

}

Tags: , ,

Comments are closed.