Метаданные могут быть импортированы с использованием экземпляра Lazy<T, TMetdat>
.Говоря простыми словами, это означает:
[Import(typeof(B))]
Lazy<B, IDictionary<string, object>> _b;
public B ObjectB { get { return _b.Value; } }
public string NameB { get { return _b.Metadata["Name"]; } }
Но часто бывает неплохо определить контракт метаданных, например:
public interface INameMetdata
{
string Name { get; }
}
, который вы можете использовать вместо словаря:1008 *
[Import(typeof(B))]
Lazy<B, INameMetadata> _b;
public B ObjectB { get { return _b.Value; } }
public string NameB { get { return _b.Metadata.Name; } }
Использование контрактов метаданных позволит вам использовать реализацию интерфейса со статической типизацией, которую MEF автоматически спроектирует для вас.