Pregunta Agregar servicios después de que se haya construido el contenedor


¿Es posible registrar un servicio en tiempo de ejecución, es decir, después de la ContainerBuilder ha sido construido y el Container ha sido creado (y ContainerBuilder a disposición de)?


75
2018-02-15 00:29


origen


Respuestas:


Sí, puedes, usando el Update método en ContainerBuilder:

var newBuilder = new ContainerBuilder();
newBuilder.Register...;

newBuilder.Update(existingContainer);

91
2018-02-15 20:47



Debido a que ContainerBuilder.Update ha quedado en desuso, la nueva recomendación es usar el ámbito de duración del niño.

Agregar registros a un ámbito de por vida

Autofac le permite agregar registros "sobre la marcha" a medida que crea ámbitos de vida. Esto puede ayudarlo cuando necesite hacer una especie de anulación de registro limitada de "soldadura por puntos" o si generalmente solo necesita algunas cosas adicionales en un ámbito que no desea registrar globalmente. Para ello, pasa un lambda a BeginLifetimeScope () que toma un ContainerBuilder y agrega registros.

using(var scope = container.BeginLifetimeScope(
  builder =>
  {
    builder.RegisterType<Override>().As<IService>();
    builder.RegisterModule<MyModule>();
  }))
{
  // The additional registrations will be available
  // only in this lifetime scope.
}

Trabajando con alcances de por vida


1
2018-03-20 16:17