2016-02-19 30 views
6

Herkes, Asp.Net 5'teki Bağımlılık Enjeksiyonu bağlamında aşağıdakileri anlamama yardımcı olabilir ve nesne atabilir.ASP.NET 5 ve Object Dispose'da Bağımlılık Enjeksiyonu

Hizmetimin, atma yöntemini çağıran IDispose arabirimini uygulayıp uygulamadığını anlamam gerekir.

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddTransient<IService, Service>(); 
    services.AddScoped<IService, Service>(); 
    services.AddSingleton<IService, Service>(); 
    services.AddInstance<IService, Service>(); 
}   

cevap

4

IServiceCollection, uygulamanızda kullanılabilen hizmetlerin kümesini içerir. Kullanmak istediğiniz hizmetleri ve ömürlerini tanımlarsınız ve uygulama bunları sizin için başlatacak ve imha edecektir.

Geçici

Geçici ömür hizmetleri onlar istenen her oluşturulur:

4 farklı yaşamları vardır. Bu ömür, hafif, vatansız hizmet için en iyi şekilde çalışır.

Dürbünlü

Dürbünlü ömür boyu hizmetleri isteğe başına bir kez oluşturulur.

Singleton

Singleton ömür boyu hizmetleri onlar istenen ilk defa oluşturulan ve daha sonra takip eden her istek aynı örneği kullanacağız. Uygulamanız tekil davranış gerektiriyorsa, hizmet kabuğunun hizmet ömrünü yönetmesine izin vermek, tekil tasarım desenini uygulamak ve nesnenizin yaşam süresini sınıfta yönetmek yerine tavsiye edilir.

Örnek

Sen hizmetler konteyner doğrudan bir örneğini eklemeyi seçebilirsiniz. Bunu yaparsanız, bu örnek tüm sonraki istekler için kullanılacaktır (bu teknik Singleton kapsamlı bir örnek oluşturur). Örnek hizmetleri ve Singleton hizmetleri arasındaki önemli farklardan biri, Örnek hizmetinin ConfigureServices içinde oluşturulmuş olmasıdır; Singleton hizmeti ise ilk kez istenildiğinde yüklenir.

, okumak için zaman ayırın asp.net 5 resmi belgeler büyüktür: http://docs.asp.net/en/latest/fundamentals/dependency-injection.html


dokümantasyon bağımlılıkları ömürleri bağımlılık enjeksiyon hizmeti tarafından işlenir tam olarak nasıl söz ama eğer arama yaparsanız olmaz ServiceManager class

bir kapsam oluşturulduğunda, service scope factory w instanciated yeni bir hizmet kapsamını, döner, biraz daha spesifik olmak gerekirse: kodunda, sen ömür yöneten ServiceProvider sınıf bulacaksınız Bir servis sağlayıcı. Bağımlılık enjeksiyon servisinin bir servisi elden çıkarması gerektiğinde, service provider's dispose method numaralı telefonu arayarak service scope's dispose method numaralı telefonu arar.

Servis sağlayıcı nasıl çalışır? O, _resolvedServices ve _transientDisposables adında bir özellikteki tüm devredilebilir öğelerin adında bir hizmet kapsamına sahiptir.dispose() method of the service provider çağrıldığında, bu iki özelliğe sahip olduğu tüm öğelere iliştirir ve her nesne için dispose yöntemini çağırır. Burada tüm kaynak koduna sahip

: Dependency Injection source code

+0

iService kaynak gibi temizlenecektir Ne yapacak C# ifadesini kullanarak – user334223

+0

deyimini kullanarak o kendini kullandığı nesne için ömür boyu biraz kapsamını tanımlar yapar. Bağımlılık Enjeksiyon biraz farklıdır ve daha karmaşıktır çünkü uygulama sizin için birçok şeyi çözebilir. Örneğin, özel mülkte bir Havuza sahip olan bir hizmetiniz varsa, EF db içeriğinizi özel mülkiyette barındıran bir deponuz varsa, kurucuları gereksinimlerini karşılayacak, başlangıç ​​sınıfınızda her hizmeti ekleyecek ve uygulama Sizin için bağımlılıklar. Her neyse, uygulama, karar verdiğiniz zaman, onlara verdiğiniz süreye bağlı olarak temizlenecektir. – AdrienTorris

+0

Bu nedenle, her bir hizmete verdiğiniz yaşam süresinin seçimi çok önemlidir ve dikkate alınması gerekir. – AdrienTorris

İlgili konular