Я действительно не знал, как сформулировать название моих вопросов, поэтому заранее извиняюсь. Я прочитал части документации MEF, чтобы попытаться найти ответ на свой вопрос, но не смог его найти.
Я использую ImportMany, чтобы позволить MEF создавать несколько экземпляров определенного плагина. Этот плагин импортирует несколько частей, и в рамках вызовов к определенному экземпляру он хочет, чтобы эти импорты были одиночными. Однако я не хочу, чтобы все экземпляры этого плагина использовали один и тот же синглтон.
Например, допустим, мое приложение ImportMany
s Blender. Каждый раз, когда я прошу один, я хочу другой Блендер. Однако каждый Blender Import
s является ControlPanel. Я хочу, чтобы у каждого Блендера была своя собственная панель управления. Чтобы сделать вещи немного более интересными, каждый Blender может загрузить BlendPrograms, которые также содержатся в их собственных сборках, и MEF позаботится об этой загрузке. Для получения скорости BlendProgram может потребоваться доступ к ControlPanel, но я хочу убедиться, что он обращается к правильной ControlPanel (то есть той, которая связана с Blender, который связан с программой!)
Эта диаграмма может немного прояснить ситуацию:
Как видно из примечания, я полагаю, что путаница может быть вызвана изначально бедной конструкцией. BlendProgram не должен напрямую касаться ControlPanel, и вместо этого, возможно, BlendProgram должен получать скорость через Blender, который затем делегирует запрос своей ControlPanel.
Если это так, то я предполагаю, что BlendProgram должна иметь ссылку на конкретный Blender. Чтобы сделать это, это правильный способ использовать MEF и использовать ImportingConstructor для BlendProgram, т.е.
[ImportingConstructor]
открытый класс BlendProgram: IBlendProgram
{
public BlendProgram (Блендер Блендер) {}
}
И если это так, откуда мне знать, что MEF будет использовать нужный плагин Blender?