Ist es möglich , einen Dienst zur Laufzeit registrieren, nachdem das heißt die ContainerBuilder
gebaut wurde und das Container
erstellt wurde (und ContainerBuilder
entsorgt)?
Ist es möglich , einen Dienst zur Laufzeit registrieren, nachdem das heißt die ContainerBuilder
gebaut wurde und das Container
erstellt wurde (und ContainerBuilder
entsorgt)?
Antworten:
Ja, Sie können mit der folgenden Update
Methode ContainerBuilder
:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
Da ContainerBuilder.Update veraltet ist, wird empfohlen, den Bereich für die untergeordnete Lebensdauer zu verwenden.
Hinzufügen von Registrierungen zu einem lebenslangen 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 eingeschränkte Registrierungsüberschreibung für Punktschweißungen durchführen müssen oder wenn Sie im Allgemeinen nur einige zusätzliche Dinge in einem Bereich benötigen, den Sie nicht global registrieren möchten. Dazu übergeben Sie ein Lambda an BeginLifetimeScope (), das einen ContainerBuilder verwendet 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.
}