Надстройки .NET для фабричных классов, где данные могут быть преобразованы обратно в конкретные - PullRequest
2 голосов
/ 03 ноября 2010

У меня есть хост-приложение, которое контролирует различные фабричные классы, которые производят реализации общего контракта на данные. Кроме того, все фабрики происходят из определенного фабричного контракта. Фабрикам могут потребоваться конкретные реализации контракта данных для генерации своих собственных объектов ... поэтому хост может в общем случае передавать данные через функцию в контракте фабрики, которая имеет один аргумент типа контракта данных. Затем фабрики пытаются привести его к тому типу, который им интересен ... игнорируя его, если он не совпадает. Пока все работает нормально.

Я хотел бы расширить это, чтобы позволить пользователям создавать фабрики надстроек с использованием инфраструктуры надстроек .NET, но меня беспокоит границы изоляции ... Например, если фабрика создает экземпляр IData, может другой объект приведения объекта, созданный надстройкой к общему конкретному типу реализации? Похоже, что необходимость в адаптерах в конвейере надстроек может все испортить?

Например, на диаграмме ниже конкретный класс DataA будет совместно использоваться PluginA и PluginB, а конкретный класс DataB будет совместно использоваться PluginB и PluginC.

alt text


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

1 Ответ

0 голосов
/ 04 ноября 2010

Итак, после некоторых экспериментов я обнаружил, что MEF может решить эти проблемы.Изоляционные барьеры, создаваемые System.Addins, по-видимому, делают невозможным получение конкретной конкретной реализации ... MEF позволяет мне возвращать обнаруженные надстройки к их конкретным типам из надстроек, которые знают о конкретных реализациях.

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