Использование Autofac и нескольких назначений WithMetadata - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь использовать 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)

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

IEnumerable<Lazy<IPlugin, IMetaDataName>>

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

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

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

Спасибо

Крейг.

1 Ответ

0 голосов
/ 04 декабря 2011

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

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

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

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

...