È possibile registrare un servizio in fase di esecuzione, ovvero dopo che ContainerBuilder
è stato costruito e Container
creato (e ContainerBuilder
smaltito)?
È possibile registrare un servizio in fase di esecuzione, ovvero dopo che ContainerBuilder
è stato costruito e Container
creato (e ContainerBuilder
smaltito)?
Risposte:
Sì, puoi, utilizzando il Update
metodo su ContainerBuilder
:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
Poiché ContainerBuilder.Update è stato deprecato, la nuova raccomandazione è di utilizzare l'ambito della durata del figlio.
Aggiunta di registrazioni a un ambito a vita
Autofac ti consente di aggiungere registrazioni "al volo" mentre crei ambiti a vita. Questo può aiutarti quando devi eseguire una sorta di override della registrazione limitata "saldatura a punti" o se in genere hai solo bisogno di alcune cose aggiuntive in un ambito che non vuoi registrare a livello globale. Puoi farlo passando un lambda a BeginLifetimeScope () che accetta un ContainerBuilder e aggiunge le registrazioni.
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.
}