.Net Core Auto Register Service

Serkan Kaya
2 min readNov 29, 2020

Merhabalar ben Serkan, bugün sizlere .Net Core tarafında yazılan servislerin veya inject edilmesi gereken external paketlerin toplu ve yönetilebilir bir biçimde nasıl sisteme entegre edebileceğimizi aktarmaya çalışacağım.

Öncelikle kullanacağımız servis veya benzeri kodlarımızın sistem üzerinde kullanılabilmesi için bir yaşam döngüsüne ihtiyaç duyarız. Net Core’ da DI(Dependency Injection) ile bunu rahatlıkla sağlayabiliyoruz. Burada amaç, kod üzerindeki bağlılıkları azaltıp, abstract ve interface’ ler ile yapının yönetilebilirliğini en üst seviyeye çıkartmaktır.

Üç adet Service Life Time örneği verebiliriz.

Bu yaşam döngülerinden kısaca bahsedecek olursak:

Transient: Nesneye yapılan her çağrıda yeni bir nesne oluşturulur.

Scoped: Yapılan her request’te nesne tekrar oluşur ve bir request içerisinde sadece bir tane nesne kullanılır.

Singleton: Uygulama başlatıldığında register edilen nesneye ait sadece bir tane instance oluşur ve uygulamadaki her yerden bu referans çağrılır.

Neden Auto Register ?

Şöyle bir senaryo düşünelim. Projemiz çok büyüyor ve burada kullandığımız servisler veya external paketleri inject etmek istediğimizde gereğinden fazla kod satırına maruz kalıp bunları yönetebilmek ciddi bir mesele haline geliyor.

Burada servisleri tek tek DI ile eklemiş oluyoruz. Fakat bu servislerin büyük projelerde çok fazla olacağını ve bunları yönetmenin ne kadar zorlaşacağını konuşmuştuk. Bunu minimize edecek bir nuget paketi mevcut. Bu paket, belirli şartlara göre tüm servisleri otomatik olarak inject edebiliyor.

Package manager veya .Net CLI üzerinden

Install-Package NetCore.AutoRegisterDi -Version 2.1.0
dotnet add package NetCore.AutoRegisterDi --version 2.1.0

ilgili paketi indirip servislerimizi inject etmek için kullanabiliriz.

Paketi indirip kurduktan sonra, startup için extension yazıp veya doğrudan startup üzerinde servisleri inject ettiğimiz yerde ilgili servislerin bulunduğu Assembly yolu bulunup, yaşam döngüsüne koyacağımız nesnelerimizin özelliklerini belirtebiliriz.

Class veya interface üzerinde Where koşulu ile filtreleme yapıp aynı zamanda IgnoreThisInterface ile inject etmek istemediğimiz nesneyi de belirtebiliyoruz. Son olarak ServiceLifeTime’ ı parametre olarak verip tüm servislerimizi inject etmiş oluyoruz.

Sonuç olarak yazdığımız servisleri veya kullandığımız paketleri DI ile inject etmeye çalıştığımızdan yönetilebilirliği arttırıp daha düzgün bir şekilde kullanabilmemizi sağlıyor.

Sizlere faydalı olabileceğini düşündüğüm küçük bir makale paylaşmak istedim. Olumlu veya olumsuz yönlerini belirtmek için bana bildirirseniz çok mutlu olurum ve şimdiden teşekkür ederim.

Daha farklı yazılar ile karşınıza çıkmak üzere şimdilik hoşçakalın :)

İlgili Nuget paketinin Github proje linkine aşağıdan ulaşabilirsiniz.

--

--