Я хотел бы спросить, можно ли импортировать какой-либо объект по значению ExportMetadata? Например, строка. Или, если я объявил некоторые объекты экспорта по имени и типу, могу ли я импортировать их все только по типу?
1 ответ
Вам нужно будет отложить создание детали через Lazy
или ExportFactory
. Например, учитывая мой тип образца:
[Export(typeof(ILogger)), ExportMetadata("Name", "Console")]
public class ConsoleLogger : ILogger
{
}
Мне понадобится интерфейс метаданных:
public interface INamedMetadata
{
string Name { get; }
}
Затем я мог бы импортировать много экземпляров как:
[ImportMany(typeof(ILogger))]
IEnumerable<Lazy<ILogger, INamedMetadata>> Loggers { get; set; }
И сделать выбор:
public ILogger GetLogger(string name)
{
return Loggers
.Where(l => l.Metadata.Name.Equals(name))
.Select(l => l.Value)
.FirstOrDefault();
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
ILoggers
только выбранныйILogger
создается в любой момент времени. Остальные доступны для использования, но экземпляры не будут созданы, пока не будет вызванl.Value
.