Axs Document
  • AXS Framework
  • 1. Common structures
    • 의존성 관계 설정 - Dependency Injection
    • 캐싱 - Caching
    • 로깅 - Logging
    • 세션 - Session
    • 다중 테넌트 - Multi Tenancy
    • 모듈 시스템 - Module System
    • 객체 매핑 - Object To Object Mapping
    • 메일 연동 - Mail System
  • 2. Domain Layer
    • 엔티티 - Entities
    • 저장소 - Repositories
    • 도메인 서비스 - Domain Services
    • 작업 단위 - Unit Of Work
  • 3. Application Layer
    • 애플리케이션 컨트롤러 - Application Controller
    • DTO - Data Transfer Objects
    • DTO 객체의 유효성 체크 - Validating Data Transfer Objects
    • 인증 - Authorization
    • 감사 로그 - Audit Logging
    • 엔티티 기록 - Entity History
  • 4. Object Relational Mapping
    • EntityFramework 통합
    • Dapper 통합
  • 5. Background Services
    • 백그라운드 작업과 워커
  • 6. Presentation Layer
    • 에러 핸들링
Powered by GitBook
On this page
  1. 1. Common structures

의존성 관계 설정 - Dependency Injection

PreviousAXS FrameworkNext캐싱 - Caching

Last updated 1 year ago

Dependency Injection

설명

Asp.net Core와 Axus는 (Inversion of Control)을 통해서 종속성 주입(Dependency Injection 이하 DI)을 사용하여 필요한 객체를 생성자에서 받아 사용하면 됩니다.

의존성 주입(Dependency Injection)은 소프트웨어 개발에서 중요한 개념 중 하나입니다. 이것은 객체 지향 프로그래밍과 관련이 있으며, 주로 코드의 재사용성, 테스트 용이성, 유지 보수성을 향상시키는 데 사용됩니다.

의존성 주입은 다른 객체나 모듈로부터 필요한 의존성을 외부에서 주입하는 디자인 패턴입니다. 이것은 주로 인터페이스나 추상 클래스를 사용하여 구현됩니다. 주요 목표는 결합도를 낮추고 의존성을 관리하기 쉽게 만드는 것입니다.

의존성 주입에는 여러 가지 형태가 있으며, 주로 세 가지 유형이 있습니다.

생성자 주입(Constructor Injection): 의존성을 객체 생성 시 생성자를 통해 주입합니다. 이 방법은 가장 일반적이며 명시적입니다.

메서드 주입(Method Injection): 의존성을 메서드를 통해 주입합니다. 이 방법은 객체가 생성된 후에도 의존성을 변경할 수 있습니다.

속성 주입(Property Injection): 의존성을 객체의 속성을 통해 주입합니다. 이 방법은 가장 느슨한 결합을 제공하지만 일부 런타임 오류 가능성이 있습니다.

의존성 주입을 사용하면 코드의 결합도를 낮추고 더 모듈화된 소프트웨어를 작성할 수 있으므로, 소프트웨어 아키텍처와 설계에 중요한 영향을 미칩니다.

예제

public class SampleAppController : MyProjectNameAppControllerBase
{
    // 내부 변수 선언
    private readonly ISampleRepository _sampleRepository;

    // 생성자에서 ISampleResository를 IoC엔진에서 받아(DI) 온다.
    public SampleAppController(ISampleRepository sampleRepository)
    {
        // 생성자에서 받은 객체를 다른 메서드에서 사용할 수 있도록 내부 변수에 할당한다.
        _sampleRepository = sampleRepository;
    }

    public void CreateSample(string name, int area)
    {
        var sample = new Sample { sampleName = name, Area = area };
        // 생성자에서 받아온 객체를 사용하여 데이터를 추가한다.
        _sampleRepository.Insert(sample);
    }
}

위와 같이 사용하기 위해서는 ISampleRepository 인터페이스를 상속 받으면서 'ITransient' 인터페이스를 상속받으면 Module이 실행이 되면서 자동으로 IoC에 등록이 되어 DI 할 수 있게 됩니다.

public class SampleRepository : ISampleRepository, ITransient
{

}

모듈에서는 아래 코드를 통해 자동으로 등록이 됩니다.

IocManager.RegisterAssembly(typeof(MyProjectNameHostModule).GetAssembly());

확인

모듈을 초기화 시 RegisterAssembly 호출하여 모듈내 모든 객체가 초기화가 되면 모든 객체가 등록이 된 상태이다. 브라우저에서 '/app/api/Sample'을 호출 하였을 때 SampleAppController 클래스의 생성자에서 ISampleRepository의 객체를 확인하면 된다. 만약 잘못 등록 되었거나 규칙에 맞지 않았다면 에러가 발생이 됩니다.

IoC
DI Framework