Frage Hinzufügen von Diensten nach dem Erstellen des Containers


Ist es möglich, einen Dienst zur Laufzeit zu registrieren, also nach dem ContainerBuilder wurde gebaut und die Container wurde erstellt (und ContainerBuilder entsorgt)?


75
2018-02-15 00:29


Ursprung


Antworten:


Ja, Sie können, mit der Update Methode an ContainerBuilder:

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

newBuilder.Update(existingContainer);

91
2018-02-15 20:47



Da ContainerBuilder.Update veraltet ist, besteht die neue Empfehlung darin, den Gültigkeitsbereich für Kindlizenzen zu verwenden.

Hinzufügen von Registrierungen zu einem Lifetime-Bereich

Mit Autofac können Sie Registrierungen "on the fly" hinzufügen, während Sie lebenslange Bereiche erstellen. Dies kann Ihnen helfen, wenn Sie eine Art "Punktschweißung" mit begrenzter Registrierungsüberschreibung durchführen müssen oder wenn Sie in der Regel nur etwas zusätzliches Material in einem Bereich benötigen, den Sie nicht global registrieren möchten. Dazu übergeben Sie ein Lambda an BeginLifetimeScope (), das einen ContainerBuilder übernimmt und Registrierungen hinzufügt.

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

Arbeiten mit Lifetime Scopes


1
2018-03-20 16:17