.Net Core kullanmaya başlamadan önce Dependency Injection(DI) için Autofac kütüphanelerini kullanıyordum. Açıkcası çok da seviyordum. Daha sonra projemizi Core‘a taşıyalım deyince, kullandığımız kütüphaneler için alternatif neler varmış diye araştırmaya başladık. Önce benchmarkları inceledik. Aşağıdaki adresten sizler de inceleyebilirsiniz:
https://github.com/danielpalme/IocPerformance
Benchmarka verilerine göre LightInject kullanmaya karar verdik. Gerekli implementasyonları yaparken zorlandık. Autofac gibi kolay ve anlaşılır değildi, ayrıca community’si de çok güçlü olmadığından sorularımıza cevap bulamadık. Durum böyle bir hal alınca dedik ki neden Microsoft DI kullanmıyoruz. Hem hızlı hem de community desteği var. Autofac‘den Microsoft DI‘a geçiş yaparken Lifetime tanımlamalarında acaba hangisi hangisidir? Şu neye karşılık gelir dediğimiz yerler oldu. O kısımları da aşağıda sizlerle paylaşıyorum.
Autofac | .Net Core | Açıklama |
---|---|---|
InstancePerDependency() | ServiceLifetime.Transient services.AddTransient<,> | Her nesne isteğinde, yeni bir instance döner |
InstancePerLifetimeScope() InstancePerRequest() | ServiceLifetime.Scoped services.AddScope<,> | Her scope için tek bir instance yaratır. Mesela bir web projesinde http request bir scope'tur. Sonlanana kadar hep aynı instance'ı döner. |
SingleInstance() | ServiceLifetime.Singleton services.AddSingleton<,> | Uygulama ayağa kalktığında tek bir instance yaratılır ve hep bu instance geri döner. |