Интерфейс общего назначения, встроенный в .NET Framework.

Я бы использовал AppDomains для управления объектами в разных сборках как таковых:

object _Instance = _AppDomain.CreateInstanceFromAndUnwrap(assemblyFileNamePath, typeName);

Я определил такой интерфейс

interface IInvokable { int Invoke(string[] args); }

так что я могу вызывать методы для любого объекта, который его реализует

(_Instance as IInvokable).Invoke(new string[]{methodName,parameters});

Мне это не нравится, потому что, насколько мне известно, любые сборки, которые я создаю, должны иметь ссылку на сборку, в которой я определил IInvokable.

Вопрос: Существуют ли какие-либо встроенные интерфейсы, которые я могу использовать вместо этого, возможно, специально предназначенные для этой цели или предназначенные для определенных пользователем целей. Я также открыт для других предложений о том, как решить проблему.


person John B.    schedule 17.12.2014    source источник
comment
Просто используйте отражение, чтобы получить тип и метод и вызвать его? Итак, создайте экземпляр и разверните... GetType... GetMethod(Invoke)... затем MethodInfo.Invoke.   -  person ta.speot.is    schedule 17.12.2014


Ответы (1)


Даже если такой интерфейс и есть, то использовать его — плохая идея. Каждый интерфейс представляет собой контракт и имеет значение. Определение интерфейса может меняться со временем. Например, в .NET у вас есть разные интерфейсы с одинаковыми элементами, но с разными именами, пространствами имен и сборками. И мы видели обратно несовместимые изменения в .NET 4.5, когда ваше старое приложение WPF .NET 4.0 просто не компилировалось при обновлении до .NET 4.5. Поэтому лично я бы предложил придерживаться вашего текущего подхода.

Но если вы все же хотите сделать это по-своему, то можете попробовать ICommand, а также поиграться с Func‹string[], int› ;) .

И я также не рекомендовал бы выполнять одну дополнительную операцию отражения, как было предложено ta.speot.is, поскольку операции отражения сложны для вычислительных ресурсов и менее безопасны для типов (вы теряете некоторые проверки во время компиляции).

Также вам может быть полезно ознакомиться с MEF.

person Bogdan Verbenets    schedule 30.10.2015