Czy można zarejestrować usługę w czasie wykonywania, czyli po ContainerBuilder
zbudowaniu i Container
utworzeniu (i usunięciu ContainerBuilder
) usługi?
Czy można zarejestrować usługę w czasie wykonywania, czyli po ContainerBuilder
zbudowaniu i Container
utworzeniu (i usunięciu ContainerBuilder
) usługi?
Odpowiedzi:
Tak, możesz, korzystając z Update
metody na ContainerBuilder
:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
Ponieważ ContainerBuilder.Update został przestarzały, nowe zalecenie polega na użyciu podrzędnego zakresu życia.
Dodawanie rejestracji do zakresu dożywotniego
Autofac umożliwia dodawanie rejestracji „w locie” podczas tworzenia zakresów dożywotnich. Może ci to pomóc, gdy musisz zrobić coś w rodzaju „zgrzewania punktowego” nadpisania ograniczonej rejestracji lub jeśli generalnie potrzebujesz tylko dodatkowych rzeczy w zakresie, którego nie chcesz rejestrować globalnie. Robisz to, przekazując lambdę do BeginLifetimeScope (), która pobiera ContainerBuilder i dodaje rejestracje.
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.
}