Разве нет способа создать словарь из объекта?
Конечно, вот так:
public static IDictionary<string, object> GetPropertiesDictionary<T>(object o)
{
var dictionary = new Dictionary<string, object>();
foreach (var property in typeof(T).GetProperties())
{
dictionary[property.Name] = property.GetValue(o,null);
}
return dictionary;
}
По сути, моя потребностьэто использование импортированного IEnumerable для создания новых композиций, своего рода «пересылка» значений в другой CompositionBatch
Похоже, вы пытаетесь реализовать своего рода «ExportMany» особенность, которой нет (пока?) в MEF.(Он существует в некоторых других контейнерах IOC, таких как облегченные адаптеры в AutoFac ).Вы можете обойтись без такой функции.
Я собираюсь предположить, что у вас есть доступ к экспорту какого-либо типа (IStuff
), но вам нужно обернуть их в адаптеры, чтобы вы могли импортировать ихкак-то еще (IAdaptedStuff
).Возможно, вы могли бы придерживаться обычной атрибутивной модели программирования и сделать что-то вроде этого:
[Export(typeof(IAdaptedStuffUser))]
public class AdaptedStuffUser : IAdaptedStuffUser
{
[Import] // instead of [ImportMany(typeof(IAdaptedStuff)))]
public IAdaptedStuffProvider AdaptedStuffProvider { private get; set; }
public void DoSomething()
{
foreach (var adaptedStuff in AdaptedStuffProvider.GetAdaptedStuff())
{
...
}
}
}
[Export(typeof(IAdaptedStuffProvider))]
public AdaptedStuffProvider : IAdaptedStuffProvider
{
[ImportMany]
public IEnumerable<IStuff> StuffToAdapt { get; set; }
public IEnumerable<IAdaptedStuff> GetAdaptedStuff()
{
return StuffToAdapt.Select(x => new Adapter(x));
}
}