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 que le Container
a été créé (et ContainerBuilder
supprimé)?
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 que le Container
a été créé (et ContainerBuilder
supprimé)?
Réponses:
Oui, vous pouvez, en utilisant la Update
méthode sur ContainerBuilder
:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
Étant donné que ContainerBuilder.Update est obsolète, la nouvelle recommandation consiste à utiliser l'étendue de la durée de vie des enfants.
Ajout d'enregistrements à 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 avez besoin de faire une sorte de remplacement d'enregistrement limité par «soudage 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 inscriptions.
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.
}