Dependency Injection, Bir sınıfın bağımlı olduğu sınıfların, bu sınıf içine dışarıdan enjekte edilme işlemidir. Temel amaç somut sınıflara olan bağımlılığı ortadan kaldırmak ve test edilebilirliği kolaylaştırmaktır.
Bir servis DataServiceye bağımlıysa direkt olarak DataServicenin kendisine bağımlıdır. Bunun gibi servisleri test etmek zor olabilir . Bunun yerine servisimiz IDataServiceye bağlıysa sadece inteface tarafından sağlanan contractlar önemsenir. Hangi uygulamanın implemente edildiğinin bir önemi kalmaz. Servisin davranışını test etmek için IDataServicenin Mockunu kullanabiliriz.
Service Lifetime
Singleton, Yalnızca tek bir instancenin oluşturulacağı anlamına gelir. Bu instance, kendisine ihtiyaç duyan tüm componenentler tarafından ortak kullanılır. Böylece hep aynı nesne kullanılmış olur.
Scoped, Uygulamaya yapılan her request için bir intance oluşturulur. Ve bu request için response dönene kadar hep aynı instance kullanılır. Request sonlanana kadar ihtiyaç duyulan her constructer içerisine aynı nesne injecte edilir.
Transient, Her zaman yeni bir instance oluşturulur. Bir request boyunca her constructerda yeni bir instance oluştururlur.
Not: Bir Component Lifetime süresi kendinden kısa olan bir componente bağımlı olamaz. Örneğin singleton A servisinin construterında scoped bir B servisine bağımlı olamaz.
Implementation factories
DataService nesnesini, IOtherService componentini kullanarak oluşturmak istesek yukarıdaki gibi yapabiliriz.
GetRequiredService<T> yerine GetService<T> de kullanabiliriz. İkisi arasındaki fark GetRequirdeService de eğer nesne bulunamazsa geriye null döner. fakat GetService bulamazsa geriye
InvalidOperationException
exception fırlatır.
Decorator Pattern Configuration
Yukarıdaki UML'e baktığımızda decorator kalıbı kullanılmıştır. IDataService interfacesi DataService sınıfı tarafından implemente edilmiştir. DataService sınıfına run-time da yeni bir özellik eklemek istediğimizde decorator tasarım kalıbını kullanabiliriz. Bu yeni özelliği IDataServiceyi implemente eden CacheDataService sınıfı içerisinde yapacağız.
Package Managert consoldan NuGet\Install-Package Scrutor indirilir.
Hiç yorum yok:
Yorum Gönder