C# ve Dependency Injection(DI) Nedir? Nasıl yapılır?
C# Dependency Injection Nedir?
Dependency Injection (DI), bir sınıfın bağımlılıklarını (dependencies) dışarıdan almasını sağlayan bir desendir. Bu, kodun esnekliğini ve test edilebilirliğini artırır. DI, bağımlılıkları sınıfın içine gömmek yerine, dışarıdan sağlayarak sınıflar arasındaki bağımlılıkları azaltır.
Temel Kavramlar
- Bağımlılık (Dependency): Bir sınıfın, başka bir sınıfa ihtiyaç duyması durumudur.
- Bağımlılık Enjeksiyonu (Dependency Injection): Bir sınıfın bağımlılıklarının, başka bir sınıf tarafından sağlanması işlemidir.
Bağımlılık Enjeksiyon Türleri
- Constructor Injection: Bağımlılıklar, sınıfın yapıcısına (constructor) parametre olarak geçirilir.
- Property Injection: Bağımlılıklar, sınıfın özelliklerine (properties) atanır.
- Method Injection: Bağımlılıklar, bir metodun parametreleri olarak sağlanır.
Örneklerle Dependency Injection
1. Constructor Injection
// Bağımlılık Arayüzü
public interface IWeapon
{
void Hit(string target);
}
// Bağımlılık Sınıfı
public class Sword : IWeapon
{
public void Hit(string target)
{
Console.WriteLine($"Hitting {target} with a sword.");
}
}
// Kullanıcı Sınıf
public class Warrior
{
private readonly IWeapon _weapon;
// Constructor Injection
public Warrior(IWeapon weapon)
{
_weapon = weapon;
}
public void Attack(string target)
{
_weapon.Hit(target);
}
}
// Kullanım
class Program
{
static void Main()
{
IWeapon sword = new Sword();
Warrior warrior = new Warrior(sword);
warrior.Attack("the enemy");
}
}
2. Property Injection
public class Warrior
{
public IWeapon Weapon { get; set; }
public void Attack(string target)
{
Weapon.Hit(target);
}
}
// Kullanım
class Program
{
static void Main()
{
IWeapon sword = new Sword();
Warrior warrior = new Warrior();
warrior.Weapon = sword; // Property Injection
warrior.Attack("the enemy");
}
}
3. Method Injection
public class Warrior
{
public void Attack(IWeapon weapon, string target)
{
weapon.Hit(target);
}
}
// Kullanım
class Program
{
static void Main()
{
IWeapon sword = new Sword();
Warrior warrior = new Warrior();
warrior.Attack(sword, "the enemy"); // Method Injection
}
}
Dependency Injection Framework Kullanımı
C#'ta DI için genellikle bir framework kullanılır. Örneğin, ASP.NET Core'da yerleşik DI container vardır.
ASP.NET Core ile Dependency Injection
// Bağımlılık Arayüzü
public interface IWeapon
{
void Hit(string target);
}
// Bağımlılık Sınıfı
public class Sword : IWeapon
{
public void Hit(string target)
{
Console.WriteLine($"Hitting {target} with a sword.");
}
}
// Kullanıcı Sınıf
public class Warrior
{
private readonly IWeapon _weapon;
// Constructor Injection
public Warrior(IWeapon weapon)
{
_weapon = weapon;
}
public void Attack(string target)
{
_weapon.Hit(target);
}
}
// ASP.NET Core Configuration
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IWeapon, Sword>();
services.AddTransient<Warrior>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
}
}
// Kullanım
public class HomeController : Controller
{
private readonly Warrior _warrior;
public HomeController(Warrior warrior)
{
_warrior = warrior;
}
public IActionResult Index()
{
_warrior.Attack("the enemy");
return View();
}
}
Bu örneklerde, DI'nin farklı türlerini ve ASP.NET Core'da DI kullanımını gördük. DI, kodun daha modüler, esnek ve test edilebilir olmasını sağlar.
C# ve Dependency Injection(DI) Nedir? Nasıl yapılır?
Reviewed by Crawn
on
Aralık 12, 2024
Rating:
Hiç yorum yok: