Список кастингов <object> к списку <T> во время выполнения

Я пытаюсь создать контейнер DI и наткнулся на следующую проблему: у меня есть метод, который извлекает список зарегистрированных экземпляров для данного типа, и я хочу использовать его для внедренияIEnumerable<T> свойства в данном объекте. Примером того, чего я пытаюсь достичь, может быть следующее:

class A { public IList<IExample> Objects { get; set; } }
class B: IExample {}
class C: IExample {}
Container.Register<IExample>(new B());
Container.Register<IExample>(new C());
var obj = new A();
Container.Inject(A);
Debug.Assert(A.Objects != null && A.Objects.Count == 2);

мойRetrieve метод возвращаетIList<object>в основном потому, что у меня нет информации о типах на данный момент, поэтому я пытаюсь преобразовать этот список вList<T> во время впрыска. Вот краткая форма методов, выполняющих работу:

public virtual IList<object> Retrieve(Type type)
{
    var instances = Registry[type];
    foreach(var instance in instances) 
        Inject(type, instance); // omitted
    return instances;
}

public virtual void Inject<T>(T instance)
{
    var properties = typeof (T).GetProperties();
    foreach (var propertyInfo in properties)
    {
      var propertyType = propertyInfo.PropertyType;
      if (!IsIEnumerable(propertyType)) continue;
      var genericType = propertyType.GetGenericArguments()[0];
      propertyInfo.SetValue(instance, 
          GetListType(genericType, Retrieve(genericType)), null);
    }
}

protected virtual object GetListType(Type type, IEnumerable<object> items)
{
    return items.Select(item => Convert.ChangeType(item, type)).ToList();
}

Код возвращает ошибку:System.InvalidCastException : Object must implement IConvertible. К сожалению, я не знаю, как действовать дальше. Возможно, я делаю все это неправильно. Я думал о том, чтобы использовать дженерики или вводить несколько свойств вручную, но я действительно хотел бы не делать этого.

Заранее спасибо за любую помощь или идеи.

Ответы на вопрос(1)

Ваш ответ на вопрос