Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20252|Yanıt: 1

[Kaynak] Autofac bileşeninin örnek kapsamı

[Bağlantıyı kopyala]
Yayınlandı 14.09.2018 13:22:21 | | | |
Örnek kapsamı, hizmetlerin istekler arasında nasıl paylaşılacağını belirler.

Orijinal adres:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

Her bağımlılık için bir örnek

Bu seçenekle, hizmet istendiğinde her seferinde yeni bir örnek döner. InstancePerDependency() kullanın. Bu varsayılan seçenektir. Aşağıdaki kod, 2 ve 3 satırları eşdeğerdir.

Aşağıdaki kod, her döngü için toplamda 100 örnek için yeni bir örnek oluşturur.

Tek örnek

Bu seçeneği, kök veya iç içe alan kapsamda bir hizmet talep etmek için kullanın; her ikisi de aynı örnek döndürüyor. Belirtmek için SingleInstance() kullanın.


Aşağıdaki kod olan w1 ve w2 her zaman aynı nesnedir ve 100 döngüde sadece bir Worker sınıfı örneği vardır.


Her yaşam döngüsü kapsamında bir örnek

Bu seçeneği kullanarak belirli bir ILifetimeScope'ta hizmet talep edebilir ve yalnızca bir örnek döndürebilirsiniz. InstancePerLifetimeScope() kullanın. Aşağıdaki kodda, scope1'deki 100 kez w1 aynı nesnedir ve scope2'deki 100 kez w2 aynı nesnedir, ancak w1 ve w2 aynı nesne değildir.


Eşleşen yaşam döngüsü aralığı için bir örnek

Yukarıdaki [yaşam döngüsü kapsamı başına bir örnek] gibi, ancak daha fazla kontrol var. Bu seçeneği kullanarak ILifetimeScope nesnesine bir Etiket sağlanabilir. Tag maçının aralığında sadece bir örnek var. InstancePerMatchingLifetimeScope() yöntemini kullanın.

Aşağıdaki kodda w1 ve w2 aynı, w3 ve w4 aynıdır ama w1 ve w3 farklıdır.

Ayrıştırma sırasında uygun işaretleme sağlanmalıdır ve aşağıdaki kod istisna oluşturur.

Her istek için bir örnek

Bazı uygulamalar doğal olarak Request semantiği içerir, örneğin ASP.NET MVC veya WebForm uygulamaları. [Her istek için bir örnek] [eşleşen yaşam döngüsü aralığı için bir örnek] temelinde, kapsam işaretleyicileri, kayıt fonksiyonları ve ortak tür entegrasyonu sağlanarak uygulanır. Temelde, [eşleşen yaşam döngüsü aralığında bir örnek].

ASP.NET Core, her yaşam döngüsü kapsamı için bir örnek kullanır, her istek için bir örnek kullanır.

Her Sahip Başına bir örnek

<T> Sahiplenilen örtük ilişkilendirme türü, iç içe içe yaşam döngüsü aralıkları oluşturur. Sahip edilen instance-per-registered ile bağımlılıkları sahiplenen örneklerle sınırlayabilirsiniz.

Bu durumda, ServiceForHandler hizmeti MessageHandler örneğinin kapsamıyla sınırlıdır.


İplik aralığı

Autofac, iş parçacığı A'nın nesnelerini iş parçacığı B'nin bağımlılıklarını karşılamamaya zorlayabilir.

Sonra her biri kendi yaşam kapsamını yaratsın

Önemli: Çok zincirli bir senaryoda, ana kapsamı temizlememeye dikkat edin.Aksi takdirde, türetilmiş iş parçacığındaki alt kapsamlar hizmeti çözemeyecektir.

Her iş parçacığı, esasen yaşam döngüsü kapsamlı tekli bir MyThreadScopedComponent örneğine sahip olacaktır. Kapsamdaki örnekler harici olarak sağlanmaz, bu yüzden bileşenleri iş parçacıkları arasında izole etmek kolaydır.

ILifetimeScope parametresi eklendiğinde, ana aralık iş parçacığını oluşturan koda enjekte edilebilir ve Autofac otomatik olarak mevcut aralığı enjekte eder; bu da iç içe ölçekler oluşturmak için kullanılabilir.

Daha fazla kontrol etmek isterseniz, [eşleşen yaşam döngüsü aralığı için bir örnek] kullanarak thread-scoped bileşenlerini dahili yaşam döngüsü scope'larıyla ilişkilendirebilirsiniz, şekilde gösterildiği gibi:



Diyagramdaki "Bağlam", BeginLifetimeScope yöntemiyle oluşturulan yaşam döngüsü aralığıdır.





Önceki:Ön uç fare tıklama etkileri: özgürlük, demokrasi, refah
Önümüzdeki:{&quot;error_msg&quot;: &quot;IAM sertifikası başarısız oldu&quot;}
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com