Yeni ASP.NET Core'da, kod yazmak için çok sayıda bağımlılık enjeksiyonu kullanılır.
Örneğin, Startup sınıfımızda aşağıdakileri görebiliriz:
AddMvc AddDbContext, daha önce dizin turları için kullandığımız AddDirectoryBrowser'ı içerir:
Hepsi iyi hizmetler sunan çerçeveler ve doğrudan enjekte ederek kullanabiliriz.
Kontrolün Ters Çevirilmesi (IoC), nesne yönelimli programlamada bilgisayar kodları arasındaki bağlantıyı azaltmak için kullanılabilen bir tasarım ilkesidir. En yaygın yöntem Bağımlılık Enjeksiyonu (DI) olarak adlandırılır ve ayrıca "Bağımlılık Araştırması" adında bir yöntem de vardır. Ters çevirmeyi kontrol ederek, bir nesne oluşturulduğunda, sistemdeki tüm nesneleri kontrol eden harici bir varlık ona bağlı olduğu nesneye bir referans verir. Ayrıca bağımlılıkların nesneye enjekte edildiği de söylenebilir. ioc'yi kullanmak için Startup sınıfının Microsoft.Extensions.DependencyInjection(ps'ye başvurması gerekiyor, ki bu zaten oldukça basit: Microsoft.. Genişlet... Bağımlılık enjeksiyonu - - ,)
Bir hizmetin yaşam döngüsünü enjekte etmek
Microsoft, kendi kendine enjekte edilen hizmetler için 3 yaşam döngüsü sağlar.
Geçici
Her istendiğinde oluşturulan anlık bir yaşam döngüsü hizmeti. Bu yaşam döngüsü, en çok hafif ve devletsiz hizmetler için uygundur.
Kapsam
Aynı kapsamda, hizmet istek başına yalnızca bir kez oluşturulur.
Singleton (Sadece)
Küresel sadece bir kez oluşturulur, ilk istendiğinde ve sonra her zaman kullanılır.
Bu üç yaşam döngüsünü nasıl kullanıyorsunuz? Enjeksiyon yaparken doğrudan farklı yöntemler kullanabiliriz, kod şöyledir:
Bu üç yaşam döngüsünün belirli neslini test edelim
Arayüzleri uygulamak için farklı isimlere ve 3 farklı sınıfa sahip üç arayüz yazıyoruz, aşağıdaki gibi:
Her uygulama sınıfının yapıcısında, sınıfın yapıcıyı yeniden çalıştırıp çalıştırmadığını belirlememize olanak tanıyan yeni bir GUID üretiyoruz.
Kontrollere servisler enjekte et
Enjeksiyonun genellikle üç yolu vardır: yapıcı enjeksiyon, yöntem enjeksiyonu ve nitelik enjeksiyonu. Microsoft'un kendi IOC konteyneri varsayılan olarak üretici enjeksiyonu kullanır (Özellik enjeksiyonu desteklenmiyor, ancak üçüncü taraf bir konteyner değişimiyle de mümkündür)
Sayfa kodu görüntüle:
Projeyi çalıştırın ve aşağıda gösterildiği gibi iki farklı tarayıcıdan erişin:
Anlık yaşam döngüsünde iki kez üretilen GUID'lerin tutarsız olduğunu ve bu da nesnenin aynı olmadığını gösteriyor.
Ancak, kapsam yaşam döngüsü aynıdır, çünkü aynı kapsamda, aynı tarayıcıda iki kez kullanılan hizmetin GUID'si aynıdır ve bu da aynı nesnenin kullanıldığını gösterir.
Singleton durumunda, iki farklı tarayıcı her zaman aynı GUID'ye erişir ve bu da aynı nesnenin çağrıldığını gösterir.
(Son)
|