C #, отражение, плагины, сборки - PullRequest
0 голосов
/ 06 сентября 2010

Я новичок в этом деле. Я хочу сделать программу на C #, которая использует плагины (как способ обучения). Тем не менее, я не понимаю, где я иду не так:

PluginClass = a.CreateInstance("MBPlugin");

PluginClass имеет тип Object. Однако это всегда ноль. А имеет тип сборки. Сборка определенно содержит класс с именем MBPlugin. Так что, черт возьми?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

Было бы необычно для типа называться просто MBPlugin без пространства имен. Вы должны предоставить имя, соответствующее пространству имен, например, "MyCompany.Plugins.MBPlugin".

0 голосов
/ 06 сентября 2010

Один подход, который я использовал для некоторых проектов:

Создайте интерфейс IPlugin, который определяет методы, которые вы ожидаете для всех плагинов.В моем случае это была в основном функция Register(), которая давала плагину возможность делать все, что ему нужно.

Затем используйте Assembly.GetTypes для перечисления всех типов, определенных в сборке, и поиска классов, которыеопределить этот интерфейс (используя typeof(IPlugin).IsAssignableFrom()).Продолжайте и используйте эти типы.

Также вы можете взглянуть на фреймворки, такие как MEF , которые делают (среди прочего) именно то, что вы хотите.

...