.Net Core Asp.Net C#

.Net Core DI ve Autofac DI Container Lifetime Karşılaştırılması

Written by Burak Yılmaz

.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 CoreAçı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.

About the author

Burak Yılmaz