Когда вы используете атрибут ImportingConstructor, параметры конструктора становятся импортом. По умолчанию то, что вы импортируете (имя контракта), основано на типе параметра или свойства, в которое вы импортируете. Таким образом, в этом случае тип контракта для обоих типов импорта - строка, и между первым и вторым параметром нет реальной разницы.
Похоже, вы пытаетесь использовать импорт для предоставления значений конфигурации, которые не обязательно предназначены для этого. Чтобы заставить его делать то, что вы хотите, вы должны переопределить имя контракта для каждого из параметров, например:
[ImportingConstructor]
public EditProfile([Import("Method")] string Method, [Import("Version")] string Version)
{ }
Тогда вам нужен экспорт для Method и Version в вашем контейнере. Один из способов сделать это - просто добавить их напрямую:
var container = new CompositionContainer(catalog);
container.ComposeExportedValue("Method", "MethodValue");
container.ComposeExportedValue("Version", "2.0");
container.ComposeParts(this);
(Обратите внимание, что ComposeExportedValue на самом деле является методом расширения, определенным в статическом классе AttributedModelServices.)
Если вы хотите прочитать эти значения из какого-либо файла конфигурации, вы можете создать свой собственный поставщик экспорта, который считывает конфигурацию и предоставляет значения в ней как экспорт в контейнер.
Альтернативный способ справиться с этим - просто импортировать интерфейс, обеспечивающий доступ к значениям конфигурации по имени, и получить нужные значения из тела конструктора.