C # литой класс сборки для ввода - PullRequest
0 голосов
/ 29 октября 2018

Есть ли способ привести класс из внешней (управляемой) сборки к определенному интерфейсу?

Я имею в виду, вместо того, чтобы звонить MethodInfo.Invoke(instance, parameters);, сделайте что-то вроде этого

Assembly assembly = Assembly.LoadFrom(assemblyName);
System.Type type = assembly.GetType(typeName);
Object o = Activator.CreateInstance(type);
IYourType yourObj = (o as IYourType);

UPDATE

У меня есть внешняя сборка с известным интерфейсом, и да, у меня есть локальная копия той, на которую есть ссылка в сборке. Проверка показывает, что o относится к типу assembly.GetType (typeName);

1 Ответ

0 голосов
/ 29 октября 2018

Хорошо, я думаю, у нас наконец достаточно информации, чтобы ответить на этот вопрос.

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

Это просто не сработает, Jitter знает достаточно об обоих интерфейсах, чтобы знать, что они не совпадают, он возвращает ноль.

Интерфейсы - это контракты между двумя организациями. То, что вы действительно пытаетесь сделать, это обманывать .Net, думая, что у него такой же контракт, короче говоря, он не будет обманут

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...