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

Бих използвал AppDomains за управление на обекти в различни сборки като такива:

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

Дефинирах интерфейс като този

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

така че да мога да извиквам методи на всеки обект, който го имплементира

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

Не ми харесва това, защото AFAIK всички сборки, които генерирам, ще трябва да имат препратка към сборката, където съм дефинирал 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