Я не уверен, правильно ли я вас понимаю. Если цель состояла в том, чтобы добавить список дескрипторов служб в конструктор контейнеров / контейнеров Autofa c, вы могли бы заполнить эти дескрипторы на services
, поскольку IServiceCollection
представляет собой набор дескрипторов служб.
void BuildBaseContainer(IServiceCollection services, List<ServiceDescriptor> servicesToAdd)
{
foreach (var descriptor in servicesToAdd)
{
services.Add(descriptor);
}
var builder = new Autofac.ContainerBuilder();
builder.Populate(servicesToAdd);
this.Container = builder.Build();
}
Или, если ваша цель состояла в том, чтобы зарегистрировать объект / экземпляр как тип, известный только во время выполнения, вы можете использовать метод non-generi c As(params Type[])
и передать тип методу:
// Could also use descriptor.ImplementationType depends on your ServiceDescriptor.
var concreteType = descriptor.ImplementationInstance.GetType();
builder.RegisterType(concreteType)
.As(descriptor.ImplementationType) // As implementation type
.As(<other type>) // As any other type
.AsSelf() // As the object's type
.As(descriptor.ImplementationInstance.GetType()) // As the implementation instance type
.AsImplementedInterfaces() // As all implemented interface types
;