MEF: передача различных параметров конструктора в часть при использовании CreationPolicy.NonShared

Я знаю, что было много вопросов относительно внедрения параметров конструктора с использованием MEF, но мой немного отличается.

Я хочу знать, есть ли способ передать разные значения параметров конструктору части, когда я использую комбинацию PartCreationPolicy(CreationPolicy.NonShared)и GetExportedValue?

Например:

[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
    [ImportingConstructor]
    public Foo([Import("SomeParam")]object parameter)
    {
        ...
    }
}

и где-то еще...

container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();

В приведенном выше примере я могу использовать ComposeExportedValueтолько один раз, так как запуск его во второй раз вызовет ChangeRejectedException.

Итак, мои вопросы:

  1. Есть ли другой способ изменить значение SomeParamв вышеприведенном сценарии для каждого нового экземпляра?
  2. Если нет, то какими другими способами это можно сделать без использования какой-либо другой инфраструктуры внедрения зависимостей? Одна вещь, которая приходит на ум, — это создать службу для предоставления чего-то вроде System.Collections.Concurrent.ConcurrentQueue, где я помещаю значение параметра в очередь перед вызовом GetExportedValue, а затем удаляю значение из очереди в конструктор детали. Но это взлом, который также создает больше проблем, чем решает.
  3. Если ответ на оба вышеуказанных вопроса отрицательный, то существуют ли какие-либо другие способы добиться этого с помощью комбинации MEF и какой-либо другой инфраструктуры DI/IOC?

Спасибо за любую помощь. :)
С уважением,
Yogesh Jagota

10
задан Yogesh 29 March 2012 в 18:31
поделиться