Kapsayıcı oluşturulduktan sonra hizmetler ekleme


89

O sonra, yani çalışma sırasında bir hizmeti kayıt mümkün mü ContainerBuilderinşa edilmiş ve Containeroluşturulan (ve olmuştur ContainerBuilderbertaraf)?


Şu anda, en iyi uygulamalar AutoFac kapsayıcılarının değişmez
Ady

Yanıtlar:


96

Evet, Updateyöntemi kullanarak şunları yapabilirsiniz ContainerBuilder:

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

newBuilder.Update(existingContainer);

2
Çözümlemek için zaten kullanılmış olan mevcut bir kapsayıcıyı güncellemenin belirsiz davranışlara neden olabileceğini unutmayın. Örneğin, halihazırda çözümlenmiş tekillerin bağımlılıkları olan bileşenlerin değiştirilmesi, orijinal bileşenin referanslı kalmasına neden olur.
Steven

13
Güncelleme kullanımdan kaldırılıyor github.com/autofac/Autofac/issues/811 .
Chase Florell

20

ContainerBuilder.Update kullanımdan kaldırıldığından, yeni öneri çocuk yaşam boyu kapsamının kullanılmasıdır.

Kayıtları Yaşam Boyu Kapsamına Ekleme

Autofac, yaşam boyu kapsamları oluştururken kayıtları "anında" eklemenize olanak tanır. Bu, bir tür "nokta kaynağı" sınırlı kayıt geçersiz kılma işlemi yapmanız gerektiğinde veya genel olarak küresel olarak kaydetmek istemediğiniz bir kapsamda bazı ek şeylere ihtiyaç duyduğunuzda size yardımcı olabilir. Bunu, BeginLifetimeScope () 'a ContainerBuilder alan ve kayıtlar ekleyen bir lambda geçirerek yaparsınız.

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

Ömür Boyu Kapsamlarla Çalışma


Dikkat edilmesi gereken şey, kullanım bloğundaki yorumdur. "Ek kayıtlar yalnızca bu kullanım ömrü kapsamında mevcut olacaktır."
Ady
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.