ASP.NET core에서의 종속성 주입(di)

냐옹·2024년 4월 9일
0

.NET

목록 보기
11/31

ASP.NET core에서의 종속성 주입(di)

DI를 사용하면 클래스 간의 결합도를 낮추고, 유연성 및 테스트 용이성을 높일 수 있다. DbContext를 asp.net core 의 di 시스템에 등록하고 사용하는 것은 EF Core를 사용하는 어플리케이션에서 매우 일반적인 패턴이다.

DbContext의 DI 등록방법
ASP.NET core 프로젝트에서 DbContext를 di 컨테이너에 등록하기 위해서는 Startup.cs 파일 내의 Configure Services 메서드를 사용한다고 되어있으나... 요즘은 Program.cs에서 바로 builder.Services.... 하면 된다.
// program.cs
builder.Services.AddDbContext<디비 컨텍스트>( options=>options.UseSqlServer(Configuration.GetConnectString(연결 문자열)));
AddDbContext 메서드를 사용하여 DbContext를 서비스 컬렉션에 추가한다.

DbContext 사용
DI를 통해서 등록된 DbContext는 컨트롤러, 미들웨어, 다른 서비스 등에서 생성자 주입을 통해서 사용할 수 있다. asp.net core의 di 컨테이너는 요청마다 해당 DbContext의 새 인스턴스를 제공한다. 이것은 요청 별로 데이터베이스 컨텍스트를 분리하여 어플리케이션의 동시성을 관리하고, 각 요청이 독립적인 작업단위를 가지도록 한다.

public class YourController : ControllerBase{
private readonly DBCONTEXT이름 _context;
public YourController(DBCONTEXT이름 context){
_context = context;
}
}
그럼 asp.net core에서 di시스템을 쓰면 좋은 이유는?
1. 스코프 관리
 asp.net core의 di 시스템은 dbcontext 인스턴스의 수명을 자동으로 관리한다. 기본적으로 요청 스코프 내에서 DbContext 인스턴스를 생성하고 요청이 완료되면 자동으로 해당 인스턴스를 해제한다.
2. 테스트 용이성
3. 결합도 감소
 di를 통해서 dbcontext를 주입받는 방식은 클래스 간의 결합도를 낮추고 이는 어플리케이션의 유지보수성과 확장성을 향상시킨다.

DbContextOptions
DbContextOptions는 EF core에서 DbContext를 구성하는데 사용되는 중심적인 개체이다. DbContext의 모든 구성은 DbContextOptions를 통해서 이루어지고, 이 구성을 만들고 조작하는 주된 수단은 DbContextOptionsBuilder이다. DbContextOptionsBuilder는 DbContext 인스턴스가 데이터베이스와 상호작용하는 방식을 정의하는 다양한 옵션 ( 사용할 데이터베이스 프로바이더, 연결 문자열, 로깅 수준 등 )을 설정하는데 사용된다.
1. AddDbContext 및 관련 메서드
 AddDbContext 메서드는 asp.net core의 종속성 주입 시스템을 사용하여 DbContext를 서비스 컬렉션에 등록할 때 사용된다. DbContext에 대한 구성 옵션을 람다 표현식을 통해서 제공한다.
 이 방식은 DbContext를 전역적으로 구성하고 어플리케이션의 여러 부분에서 일관된 설정을 사용할 수 있게 한다.
2. OnConfiguring 메서드
 OnConfiguring 메서드는 DbContext 클래스 내에서 오버라이드 할 수 있는 메서드로 DbContext 인스턴스가 생성될 때 호출된다. 이 메서드 내에서 DbContextOptionsBuilder를 사용하여 DbContext의 옵션을 직접 구성할 수 있다. 이 방법은 특정 DbContext 인스턴스에 대한 구성을 지정할 때 유용하여 AddDbContext를 사용한 구성과 함께 추가적인 설정을 제공할 수도 있다.
3. new를 통한 DbContextOptionsBuilder의 명시적 생성
 DbContextOptionsBuilder는 new 키워드를 사용하여 명시적으로 인스턴스화할 수 있다. 이 방법은 주로 테스트 시나리오나 DbContext 인스턴스를 프로그래밍 방식으로 동적으로 생성할 때 사용된다.
 var optionsBuilder = new DbContextOptionsBuilder();
 optionsBuilder.UseSqlServer("Your connection string");
 var context = new MyDbContext(optionsBuilder.Options);

  • OnConfiguring의 특징
    OnConfiguring 메서드는 DbContext가 생성되는 방식( 종속성 주입 사용여부 포함 )에 관계없이 항상 호출된다. 이는 AddDbContext를 사용하여 전역적으로 구성된 옵션 외에도, 특정 DbContext 인스턴스에 추가적인 옵션을 지정하고 싶을 때 유용하다.

각 Dbcontext인스턴스는 데이터 베이스 공급자를 딱 하나만 사용하도록 구성해야한다.
예시로 optionsBuilder.UseSqlServer(“연결 문자열”);~~
이러한 Use* 메서드는 데이터베이스 공급자에 의해서 구현되는 확장 메서드이다. 확장 메서드를 사용하려면 먼저 데이터베이스 공급자 NuGet 패키지를 설치해야한다.
https://learn.microsoft.com/ko-kr/ef/core/dbcontext-configuration/
예시로 몇가지 살펴보면
SqlServer 는 useSqlServer
MySQL이나 MariaDB는 .UseMysql

0개의 댓글