The Infrastructure Layer contains the actual code that talks to your database, your file system, and external third-party APIs.
This is where the 'magic' of Dependency Inversion happens. If the Domain layer defines IUserRepository, the Infrastructure layer contains the SqlServerUserRepository that uses EF Core's DbContext. The rest of the app doesn't care—it only sees the interface.
Need to send an SMS? Use **Twilio**. Need to send an Email? Use **SendGrid**. In Clean Architecture, you create an interface in the Application layer (e.g., IEmailService) and put the Twilio/SendGrid code in the Infrastructure layer. If you want to switch to AWS SES, you only touch this project.
Q: "Should I put my migrations in this project?"
Architect Answer: "YES. Entity Framework Migrations are an 'Infrastructure' detail. By keeping them here, you keep your other projects clean and focused on business logic. The Infrastructure layer is the 'Disposable' part of your app—the part you can swap and change as tech evolves without losing your core investment."