---
title: Use Dependency Injection
impact: HIGH
impactDescription: ensures testability and loose coupling
tags: architecture, di, testing, quality, csharp
---

## Use Dependency Injection

Hard dependencies make code hard to test and maintain. Use Constructor Injection.

**Incorrect (creating dependencies):**

```csharp
public class OrderService
{
    private readonly Database _db;
    
    public OrderService()
    {
        _db = new Database("connection_string"); // Hard dependency
    }
}
```

**Correct (injecting dependencies):**

```csharp
public class OrderService
{
    private readonly IDatabase _db;
    
    // Explicit dependencies in constructor
    public OrderService(IDatabase db)
    {
        _db = db;
    }
}

// Registration in Startup.cs / Program.cs
builder.Services.AddScoped<IDatabase, SqlDatabase>();
builder.Services.AddScoped<OrderService>();
```

**Tools:** Roslyn Analyzers, Manual Review
