Использование Autofac и нескольких назначений WithMetadata

Я пытаюсь использовать Autofac, указывая 2 элемента метаданных. Кажется, что все это прекрасно добавляет, однако я не слишком четко понимаю, как получить услугу, указав оба этих элемента. У меня есть элементы метаданных для имени сборки и версии. Фрагмент регистрации выглядит следующим образом:

builder.RegisterAssemblyTypes(assembly).Where(
t => t.GetInterfaces().Any(i => 
plugin.Interface == i.Name)).As<iplugin>()
.WithMetadata<imetadataname>(m => m.For(pn => pn.Name, name)
.WithMetadata<imetadataversion>(m => m.For(pn => pn.Version, version)
</imetadataversion></imetadataname></iplugin>

Единственная документация и примеры, которые я могу найти, указывают, что я могу использовать этот синтаксис:

IEnumerable<lazy<iplugin, imetadataname="">>
</lazy<iplugin,>

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

Get the service that has the MetaDataName == "Service1" AND MetaDataVersion == "1.4"

В настоящее время я объединил их вместе для одного типа метаданных, который работает, но чувствует себя неуклюжим. Есть ли лучший подход к этому?

благодаря

Крейг.

1 ответ

Вместо того, чтобы объединять оба интерфейса в один, вы можете просто создать отдельный конкатенированный интерфейс для импортера.

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

Тип представления метаданных, используемый в зависимости, действительно специфичен для класса, получающего зависимость, а не для типа, предоставляющего его, поэтому они могут варьироваться независимо.

Знайте, что это не тот ответ, который вы искали, но надеюсь, что это поможет.

licensed under cc by-sa 3.0 with attribution.