Dependency Injection Nedir? C# .Net Core #1

Dependency Injection Nedir?

Dependency Injection Nedir?

Merhaba Arkadaşlar,

Bu yazımda sizlere Dependency Injection’ın ne olduğunu ve projelerimizde nasıl kullanılacağını anlatacağım.

Dependency Injection Nedir?

Dependency Injection (DI) anlam karşılığı Bağımlılık Enjeksiyonu demektir. Nedir bu Bağımlılık Enjesiyonu (Dependency Injection)? Proje geliştirme süreçlerimizde kullanılan bir tasarım deseni ve yaklaşımdır.

Dependency Injection, bir bileşenin (sınıf, nesne) kullanması gereken diğer bileşenleri dışarıdan sağlayarak, bileşenler arasındaki birbirilerine olan bağımlılıkları azaltmayı ve kodun daha esnek, sürdürülebilir ve test edilebilir olmasını sağlamaktadır.

Kodunuzdaki bileşenlerin birbirine olan bağımlılıklarını azaltarak, bu bileşenlerin bağımsız olarak değiştirilmesini, geliştirilmesini ve test edilmesini kolaylaştırır. Böylece kodun yeniden kullanılabilirliği artar ve uygulamanın farklı parçalarının birbirinden izole olması sağlanır.

Beraber Dependency Injection’ın avantajları ve dezavantajlarına da göz atalım.

Avantajları:

  • Modülerlik ve Esneklik
  • Bakım Kolaylığı
  • Kod Genişlenebilirliği
  • Bağımlılık Yönetimi

Dezavantajları:

  • Öğrenme Güçlüğü
  • Artan Karmaşıklık
  • Yanlış Kullanım Riski

Genel olarak Avantajları çok fazla ağır baskamtadır. Fakat her projemizde senaryolarımız farklı oldğundan dolayı bizler için doğru bir tercih olmayabilir.

Projelerimizde Bağımlılıkları Nasıl Enjekte Ederiz?

.NET Core projelerinde bağımlılıkları enjekte etmek için farklı yöntemler kullanabiliriz. Bu yöntemler:

1. Transient

Bir servisin her talep edildiğinde yeni bir örneğinin oluşturulmasını ve bu örneğin sadece o talep sırasında kullanılmasını istiyorsanız, bağımlılığı “transient” olarak tanımlayabilirsiniz. Bu şekilde her kullanımda yeni bir nesne oluşturulur ve kullanıldıktan sonra atılır.

2. Singleton

Singleton bağımlılıklar, genellikle uygulamanın genelinde tek bir kaynak veya hizmeti paylaşmak istediğiniz durumlarda kullanılır. Bu şekilde, her talep sırasında sürekli yeni bir örnek oluşturmak yerine aynı örneği paylaşarak performans ve bellek verimliliği elde edebilirsiniz.

3. Scoped

Bir servisin istek atması durumunda o servise özel oluşturulur ve istek sonrası sonlandırılır.Yani burada her kullanıcya özel tanımlaması oluşmaktadır.

Projemizde Nasıl Kullanabiliriz?

Gelin hep beraber bunları bir örnekle görelim. Örneğimizde bir notification sistemine ait bir kesit oluşturacağız.

Öncelikle bağımlılığımız için bir interface oluşturmamız gerekmektedir.

Oluşturmuş olduğumuz interface’e ait bir classımızı oluşturalım.

Sonrasında Program.cs dosyasına geldiğimizde, projemizde oluşturduğumuz IMailService arayüzünü yukarıda bahsedilen 3 farklı enjeksiyon yönteminden uygun olanı seçerek enjekte ediyoruz. .AddTransient veya .AddScoped kullanarak farklı enjeksiyon yöntemlerini de tercih edebilirsiniz.

Böylece, Program.cs dosyasında Dependency Injection kullanarak bağımlılıkları enjekte edebilir ve ilgili servisleri kullanabilirsiniz.

Oluşturduğumuz IMailService arayüzünü MailController içinde enjekte ederek, .NET Core API projesinde Dependency Injection kullanımını gerçekleştirmiş olduk. Böylece MailController içerisinde IMailService bağımlılığını kullanabilir ve projenin daha modüler ve bakımı kolay bir yapıda olmasını sağlayabiliriz.

Makalemizin sonuna geldik, okuduğunuz için teşekkür ederim ve başarılar dilerim.

 

C# ile daha fazla yazıma ulaşmak için bu bağlantı üzerinden gidebilirsiniz. Tıklayınız.

Kaynaklar;

https://www.c-sharpcorner.com/UploadFile/85ed7a/dependency-injection-in-C-Sharp/

You may also like...

2 Responses

  1. Feyza Öztürk dedi ki:

    Çok faydalı bir makale olmuş , çok teşekkür edeiz. Emeğinize sağlık.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Exit mobile version