Нужна помощь в определении интерфейса в C # - PullRequest
3 голосов
/ 02 августа 2009

У меня есть картографическое приложение, управляемое данными, где мне нужно реализовать пользовательские функции в виде плагинов. Имя пользовательского метода, который мне нужно выполнить, также будет в данных сопоставления. Я знаю, что могу вызвать метод с помощью команды invoke; но как я могу гарантировать, что каждый метод имеет соответствующую подпись?

Ответы [ 3 ]

1 голос
/ 02 августа 2009

Как правило, при разработке архитектуры плагина вы определяете интерфейс с методами, которые вы будете вызывать в плагине. Плагин необходим для реализации интерфейса. Когда вы загружаете его, вы приводите его в качестве интерфейса (если он не реализует его, это не удастся) и используете его в своем коде в качестве интерфейса. Если поведение плагина является более общим, вы просто определяете свой интерфейс более обобщенно, например, используя конфигурацию для установки параметров плагина, а затем используете простой метод без аргументов для вызова функциональности плагина. Я думаю, вам будет проще работать с предопределенным интерфейсом, и это не должно вас сильно ограничивать.

1 голос
/ 02 августа 2009

Вам придется использовать отражение.

Сначала вам нужно вызвать метод GetMethod () , чтобы получить объект MethodInfo для рассматриваемого метода.

Затем вам нужно использовать метод .GetParameters(), чтобы получить параметры метода, затем вам нужно сравнить их с тем, что вы ожидаете от метода.

1 голос
/ 02 августа 2009

Прежде всего, я не думаю, что вы должны разрешать произвольные имена для переопределенных методов - просто определите интерфейс и сделайте его простым.

Вы можете определить интерфейс с методом, который возвращает делегата методу, который выполняет работу.

В противном случае вам просто нужно будет использовать отражение, чтобы получить MethodInfo для сопоставленного метода и проверить во время выполнения, что он имеет правильную подпись.

...