web-dev-qa-db-fra.com

Ajout de services après la construction du conteneur

Est-il possible d'enregistrer un service au moment de l'exécution, c'est-à-dire après que le ContainerBuilder a été construit et le Container a été créé (et ContainerBuilder supprimé)?

82
Paul Knopf

Oui, vous pouvez utiliser la méthode Update sur ContainerBuilder:

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

newBuilder.Update(existingContainer);
95
Peter Lillevold

Étant donné que ContainerBuilder.Update est obsolète, la nouvelle recommandation consiste à utiliser l'étendue de la durée de vie enfant.

Ajout d'inscriptions à une étendue à vie

Autofac vous permet d'ajouter des enregistrements "à la volée" lorsque vous créez des portées à vie. Cela peut vous aider lorsque vous devez effectuer une sorte de remplacement d’enregistrement limité par "soudure par points" ou si vous avez généralement besoin de quelques éléments supplémentaires dans une portée que vous ne souhaitez pas enregistrer globalement. Pour ce faire, passez un lambda à BeginLifetimeScope () qui prend un ContainerBuilder et ajoute des enregistrements.

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.
}

tilisation des étendues à vie

9
wezzix