Asp.NET Core – Scrutor Kütüphanesi İle Tek Seferde Tüm Bağımlılıkları Uygulamaya Ekleme
Merhaba,
.NET Core uygulamalarında; “AddTransient”, “AddScoped” ve “AddSingleton” metotlarından amaca uygun herhangi biriyle uygulamaya süreçte nesnesini talep edeceğimiz tipleri tanımlayarak Dependency Injection uygulayabilmekteyiz. Lakin bu tanımlamalar adil tutarından fazla olduğu zamanlarda oldukça yersiz bir kalabalık koda sebebiyet vermekte ve dolayısıyla uygulamamızın sistem dosyalarında dağınıklığa mahal vermektedir. Bu içeriğimizde, bu dağınıklılığı ortadan kaldırmamızı ve tüm bağımlılıkları tek seferde uygulamaya eklememizi sağlayacak olan Scrutor kütüphanesini inceliyor olacağız.
İlk olarak makale sürecinde örneklendirme amaçlı kullanacağımız interfaceleri ve o interfacelerden türeyen classları aşağıda belirtelim.
public interface IA { } public interface IB { } public interface IC { } public interface ID { }
public class A : IA { } public class B : IB { } public class C : IC { } public class D : ID { }
Scrutor kütüphanesinin süreç sonunda işimizi ne kadar da kolaylaştırdığını görmek için normal yapılanmada nasıl hareket ettiğimizi ele alalım;
public class Startup { . . . public void ConfigureServices(IServiceCollection services) { services.AddTransient<IA, A>(); services.AddTransient<IB, B>(); services.AddTransient<IC, C>(); services.AddTransient<ID, D>(); } . . . }
Scrutor Proje Entegrasyonu
Scrutor kütüphanesinin projeye entegre edilebilmesi için aşağıdaki kodun .NET Core CLI tarafından çalıştırılması yeterlidir.
dotnet add package Scrutor
Entegrasyon işleminden sonra yukarıdaki Dependency Injection yolunun Scrutor versiyonu aşağıdaki gibi gerçekleştirilebilir.
public class Startup { . . . public void ConfigureServices(IServiceCollection services) { services.Scan(_ => _.FromAssemblyOf<IA>() .AddClasses(__ => __.AssignableTo<IA>()) .AsImplementedInterfaces() .WithTransientLifetime() .AddClasses(__ => __.AssignableTo<IB>()) .AsImplementedInterfaces() .WithTransientLifetime() .AddClasses(__ => __.AssignableTo<IC>()) .AsImplementedInterfaces() .WithTransientLifetime() .AddClasses(__ => __.AssignableTo<ID>()) .AsImplementedInterfaces() .WithTransientLifetime() ); } . . . }
Burada Scrutor algoritması “IA”, “IB”, “IC” ve “ID” interfacelerini ve onların implemented interfacelerini bularak instancelarını direkt olarak register’a kayıt eder. Dolayısıyla herhangi bir interface’e yapılan inject neticesinde, talebe karşılık ilgili implementasyona ait instance döndürülecektir.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…