Aracılığıyla paylaş


Hizmet ömrü

Hizmetler geçici, kapsamlı veya tekil bir yaşam süresiyle kaydedilebilir. Kayıtlı her hizmet için uygun bir yaşam süresi seçin.

Transient

Hizmet kapsayıcısından her istenişinde geçici yaşam süresine sahip bir hizmet oluşturulur. Bir hizmeti geçici olarak kaydetmek için AddTransient çağırın.

İstekleri işleyen uygulamalarda, geçici hizmetler isteğin sonunda atılır. Hizmetler her seferinde çözümlenip oluşturulduğunda, bu ömür istek başına tahsisatlara neden olur. Daha fazla bilgi için bkz. Geçici ve paylaşılan örnekler için IDisposable kılavuzu.

Kapsamlı

Web uygulamaları için kapsamı belirlenmiş bir yaşam süresi, hizmetlerin istemci isteği (bağlantı) başına bir kez oluşturulduğunu gösterir. İstekleri işleyen uygulamalarda, kapsamı belirlenmiş hizmetler isteğin sonunda atılır. AddScoped çağrısını yaparak kapsamı belirlenmiş hizmetleri kaydedin.

Uyarı

Entity Framework Core kullanılırken uzantı yöntemi türleri AddDbContext varsayılan olarak kapsamlı bir yaşam süresiyle kaydeder DbContext .

Kapsam belirlenmiş bir hizmet, her zaman bir kapsam içinde kullanılmalıdır - ya örtük bir kapsam (ASP.NET Core'un istek başına kapsamı gibi) ya da IServiceScopeFactory.CreateScope() ile oluşturulan açık bir kapsam.

Çözümlemeyin: Kapsamlı bir hizmeti bir singleton'dan doğrudan oluşturucu enjeksiyonu kullanarak veya singleton içinden IServiceProvider isteyerek almayın. Bunun yapılması, kapsamı belirlenmiş hizmetin tekil gibi davranmasına neden olur ve bu da sonraki istekleri işlerken yanlış duruma neden olabilir.

Açık bir kapsam oluşturup IServiceScopeFactory ile kullanırsanız, tekil içinde bir kapsamlı hizmeti çözümlemek kabul edilebilir.

Ayrıca şunları yapmak da uygundur:

  • Kapsamlı veya geçici bir hizmetten tekil bir hizmeti çözümleme.
  • Başka bir kapsamlı veya geçici hizmetten kapsamı belirlenmiş bir hizmeti çözümleme.

Varsayılan olarak, geliştirme ortamında, daha uzun bir ömrü olan başka bir hizmetten bir hizmeti çözümlemek bir özel durum oluşturur. Daha fazla bilgi için bkz . Kapsam doğrulaması.

Singleton

Tek kullanımlık hizmetler şunlardan biri oluşturulur:

  • İlk kez isteniyorlar.
  • Geliştirici tarafından kapsayıcıya doğrudan bir uygulama örneği sağlanırken. Bu yaklaşıma nadiren ihtiyaç duyulduğu görülür.

Bağımlılık ekleme kapsayıcısından hizmet uygulamasının sonraki her isteği aynı örneği kullanır. Uygulama tekil davranış gerektiriyorsa, hizmet kapsayıcısının hizmetin ömrünü yönetmesine izin verin. Tekil tasarım desenini uygulamayın ve tekilden kurtulmak için kod sağlayın. Hizmetler hiçbir zaman hizmeti kapsayıcıdan çözümleyen kodla atılmamalıdır. Bir tür veya fabrika tekil olarak kayıtlıysa, kapsayıcı tekili otomatik olarak atar.

ile AddSingletontekil hizmetleri kaydedin. Tekli hizmetler iş parçacığı açısından güvenli olmalıdır ve genellikle durum bilgisi olmayan hizmetlerde kullanılır.

İstekleri işleyen uygulamalarda, tekli hizmetler uygulama kapatıldığında ServiceProvider atılır. Uygulama kapanana kadar bellek serbest bırakılmadığından, singleton hizmeti ile bellek kullanımını göz önünde bulundurun.