определение / реализация вопроса в c # - PullRequest
0 голосов
/ 12 августа 2010

Я пытаюсь создать такую ​​архитектуру плагинов, которая;
IPlugin : интерфейс, который должны реализовывать все плагины.
NormalPlugin : обычный плагин.
ComplexPlugin : плагин, который помимо реализации базовых методов имеет несколько пользовательских методов.
HostApp : приложение, которое знает, что такое IPlugin.

в настоящее времяхост-приложение будет иметь ComplexPlugin во время компиляции и будет динамически загружать NormalPlugin.Это потому, что хост должен иметь определения в ComplexPlugin, чтобы он мог вызывать свои собственные методы.
1) Есть ли более эффективные методы для достижения этой цели?потому что добавление некоторых плагинов в качестве ссылки на хост-приложение во время компиляции выглядит для меня немного отстойно.

2) Я пытался использовать:

public interface IPlugin
{
   object CallCustomMethod(string methodName, object[] parameters);
}
, но, тем не менее, если CallCustomMethod возвращает сложный тип, приложение должно знать этот сложный тип для приведения.заранее спасибо

1 Ответ

0 голосов
/ 12 августа 2010

Если приложение никогда не вызывает пользовательских методов ComplexPlugIn, кроме как через вашу функцию CallCustomMethod, то мне кажется, что вам никогда не нужно приводить к ComplexPlugIn.

IPlugIn foo = (IPlugIn) myComplexObject.CallCustomMethod ("GenerateNewComplexPlugIn", новый объект [] {0});
foo.CallCustomMethod ("AnotherComplexMethod", null);

...