Небольшой фон
Я работаю над приложением .net, которое интенсивно использует плагины, приложение может запрашивать данные из плагинов, которые затем отправляются обратно и отображаются приложением.
Сначала я реализовал инфраструктуру плагинов в MEF, но чувствовал, что она немного ограничена для моих целей, я хотел иметь возможность изолировать плагины и иметь некоторую поддержку версий и лицензирования (так как плагины могут быть написаны третьей стороной).
Потом начал смотреть на MAF, который, кажется, поддерживает только эти сценарии, однако я вижу одну вещь, которая может быть проблемой, прежде чем я потрачу слишком много времени на изменение всего на MAF, было бы здорово знать, если у кого-то есть опыт работы сэта проблема, так как я много не работал с MAF.
Проблема
В настоящее время, когда данные отправляются обратно в приложение, вы получаете реальные объекты данных вместе с адаптером, который сообщает, какие поляобъект содержит, и вы можете использовать адаптер на объекте, чтобы извлечь нужные поля.Хорошая вещь в этом заключается в том, что вам не нужно генерировать какие-либо новые объекты результатов, но вы можете просто запросить данные результатов, когда вы хотите получить их от каждого объекта.
Теперь с MAF есть проблема Appdomain, я могу 't свободно отправлять все объекты через домен приложения, и наследование от marshalbyref для каждого объекта не является жизнеспособным.
Я мог бы сгенерировать результирующий объект со строковыми полями для каждого объекта, но с точки зрения производительности это не кажется такой хорошей идеей, интерфейс может показывать только 10 из сотен объектов, поэтому он кажется разумнее делать по требованию.
Решение, которое, я думаю, может сработать, заключается в создании последовательности просто идентификаторов объектов и позволяет интерфейсу извлекать поля из плагина через домен приложения через прокси-сервер.Так, например, приложение говорит, что оно хочет имя поля x из items [y] в плагине, и эти строки передаются через домен приложения.
Вопрос
Итак, мои вопросы:способ сделать это, есть ли лучший способ?Я, очевидно, собираюсь немного подорвать производительность, перемещаясь по всей области приложения, но, поскольку это по требованию и только для небольшого числа объектов, это не должно быть слишком плохо, верно?Как мне настроить такой прокси-объект?
Это не самый простой вопрос в мире, извините.Буду очень признателен за любую информацию, от этого зависит будущее архитектуры плагина:)