---
title: No Business Logic In Constructors
impact: HIGH
impactDescription: ensures predictable object initialization
tags: constructor, initialization, side-effects, patterns, quality, csharp
---

## No Business Logic In Constructors

Constructors should only assign fields. Complex logic, I/O, or API calls in constructors cause side effects and make testing impossible.

**Incorrect (logic in ctor):**

```csharp
public class UserService
{
    public UserService()
    {
        // BAD: I/O in constructor
        var config = File.ReadAllText("config.json");
        ConnectToDatabase();
    }
}
```

**Correct (factory or init):**

```csharp
public class UserService
{
    private readonly IConfiguration _config;

    public UserService(IConfiguration config)
    {
        _config = config; // Assignment only
    }

    public async Task InitializeAsync()
    {
        // Complex init logic here
        await ConnectToDatabaseAsync();
    }
}
```

**Tools:** SonarQube, Manual Review
