2009-08-01 4 views
3

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

+0

Можете привести пример? –

ответ

1

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

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

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

+0

Имена не являются произвольными. Внутренний разработчик создаст пользовательские функции и поместит имена в базу данных, чтобы наши пользователи и применили их к определенной карте. Когда моя служба применяет карту, она должна будет вызвать пользовательскую функцию для выполнения задачи. Я стараюсь избегать повторной компиляции приложения каждый раз, когда требуется новая пользовательская функция. Честно говоря, отражение/интерфейсы/делегаты немного сложнее, чем я привык. Так что в промежутке я, вероятно, собираюсь пойти с ранним связыванием. Но мне нужно знать, как это сделать более расширяемым образом. – 2009-08-02 02:10:43

+0

Интерфейсы не сложны, и любая книга C# для новичков научит вас, как их использовать. –

+0

«Пользовательские функции» - это SQL, или C#, или что? Ваша служба - C#? –

1

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

1

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

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

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