ASP.Net Core에서 종속성 주입을 사용하는 방법

종속성 주입에 대한 지원은 고성능의 확장 가능한 웹 애플리케이션을 구축하기위한 Microsoft의 오픈 소스, 크로스 플랫폼, 린 (lean) 및 모듈 식 프레임 워크 인 ASP.Net Core에 내장되어 있습니다. ASP.Net Core에서 프레임 워크 서비스와 애플리케이션 서비스는 밀접하게 결합되지 않고 클래스에 삽입 될 수 있습니다. 이 기사에서는 ASP.Net Core에서 종속성 주입으로 작업하는 방법을 살펴 보겠습니다.

종속성 주입 (DI라고도 함)은 클래스 또는 객체가 직접 생성하지 않고 종속 클래스를 주입 (다른 클래스 또는 객체에 의해 전달)하는 디자인 패턴입니다. 의존성 주입은 느슨한 결합을 촉진하고 테스트 가능성과 유지 보수를 촉진합니다. 또한 종속성 주입을 사용하면 이러한 구현을 활용하는 클래스 또는 인터페이스를 변경하지 않고도 구현을 변경할 수 있습니다.

ASP.Net에서 종속성 주입을 통해 서비스를 사용할 수 있도록 만들기

이제 ASP.Net Core를 사용하여 Visual Studio에서 간단한 서비스를 빌드하고이를 종속성 주입 컨테이너에 추가하고 파이프 라인에 등록한 다음 애플리케이션에서 사용하는 방법을 설명합니다. 다음 단계에 따라 Visual Studio 2017 또는 Visual Studio 2015에서 새 ASP.Net Core 프로젝트를 만듭니다. Visual Studio 2015를 사용하는 경우 .Net Core가 설치되어 있는지 확인합니다.

  1. Visual Studio 열기
  2. 파일-> 새로 만들기-> 프로젝트를 클릭합니다.
  3. 새 프로젝트 대화 상자 창에서 "ASP.NET Core 웹 애플리케이션"프로젝트 템플릿을 선택합니다.
  4. 프로젝트의 이름과 위치를 지정하고 확인을 클릭하여 저장하십시오.

이제 다음 POCO (일반 이전 CLI 객체) 클래스를 생성합니다. 이 클래스에는 하나의 속성 만 포함되어 있으며 특정 출판사의 저자가 다루는 모든 주제 영역을 나타냅니다.

공용 클래스 TopicArea

    {

        공개 문자열 이름 {get; 세트; }

    }

.NET Framework에 ITopicAreaService대한 계약을 나타내는 다음 인터페이스를 고려하십시오 TopicAreaService.

공용 인터페이스 ITopicAreaService

    {

        IEnumerable GetAllTopicAreas ();

    }

ITopicAreaService인터페이스라는 하나 개의 메소드의 선언을 포함 GetAllTopicAreas(). TopicAreaService클래스가 구현은 ITopicAreaService아래와 같이.

공용 클래스 TopicAreaService : ITopicAreaService

    {

        공용 IEnumerable GetAllTopicAreas ()

        {

            새 목록 반환

        {

            새로운 TopicArea {Name},

            새로운 TopicArea {Name},

            새 TopicArea {이름}

        };

        }

    }

ASP.Net에서 종속성 주입을위한 서비스 등록

다음 단계는 TopicAreaServiceASP.Net 코드의 일부로 사용할 수있는 종속성 주입 컨테이너에을 등록하는 것 입니다. 이렇게하려면 ConfigureServicesStartup.cs 파일 의 메서드에 다음 코드를 작성 합니다. 이 ConfigureServices메서드는 서비스 컨테이너에 서비스를 추가하므로 종속성 주입을 통해 앱에서 사용할 수 있습니다. 런타임에 의해 자동으로 호출됩니다.

public void ConfigureServices (IServiceCollection 서비스)

        {

            services.AddTransient ();

            // 프레임 워크 서비스를 추가합니다.

            services.AddMvc ();

        }

등록해야 할 서비스가 여러 개인 경우 아래와 같이 확장 방법을 사용할 수 있습니다.

공용 정적 클래스 ServiceExtensions

    {

        공용 정적 IServiceCollection RegisterServices (

            이 IServiceCollection 서비스)

        {

            services.AddTransient ();

            // 여기에 다른 모든 서비스를 추가합니다.

            반환 서비스;

        }

    }

RegisterServices방법을 사용하면 ConfigureServices방법을 간결하고 유지 관리 할 수 있습니다 . 에서 각 서비스를 지정하는 대신 아래 코드 스 니펫에 표시된 대로 메서드 에서 확장 메서드를 한 번만 ConfigureServices호출하면 됩니다.RegisterServicesConfigureServices

public void ConfigureServices (IServiceCollection 서비스)

        {

            services.RegisterServices ();

            // 프레임 워크 서비스를 추가합니다.

            services.AddMvc ();

        }

ASP.Net의 종속성 주입 수명

종속성 주입 수명은 종속 개체가 만들어지고 다시 만들어지는시기를 지정하는 데 사용됩니다. ASP.Net Core 애플리케이션에서 종속성 주입 인스턴스의 수명에 관한 한 세 가지 가능성이 있습니다.

  1. Singleton : 이는 모든 소비자가 단일 인스턴스 만 생성하고 공유 함을 의미합니다.
  2. 범위 : 이는 범위 당 하나의 인스턴스 (즉, 애플리케이션에 대한 요청 당 하나의 인스턴스)가 생성됨을 의미합니다.
  3. 일시적 : 구성 요소가 공유되지 않지만 요청할 때마다 생성됨을 의미합니다.

이 예에서는 Transient유형 을 사용했습니다 . 다음 코드 스 니펫은 서비스를 등록 할 때 다른 유형의 수명을 사용하는 방법을 보여줍니다.

services.AddScoped ();

services.AddSingleton ();

ASP.Net에서 종속성 주입을 통해 서비스 사용

구현 한 서비스가 파이프 라인에 추가되었으므로 ASP.Net Core 프로젝트의 모든 컨트롤러에서 사용할 수 있습니다. 다음 코드 스 니펫은 TopicAreaService컨트롤러에서 의 인스턴스를 요청하는 방법을 보여줍니다 .

개인 읽기 전용 ITopicAreaService _topicAreaService;

    공용 DefaultController (ITopicAreaService topicAreaService)

    {

        _topicAreaService = topicAreaService;

    }

컨트롤러의 액션 메서드에서 의 GetAllTopicAreas메서드를 TopicAreaService호출 하는 방법은 다음과 같습니다 .

[HttpGet]

        공용 IEnumerable GetAllTopicAreas ()

        {

            return _topicAreaService.GetAllTopicAreas ();

        }

아래에 참조 용 컨트롤러 클래스의 전체 코드 목록이 있습니다.
Microsoft.AspNetCore.Mvc 사용;

System.Collections.Generic 사용;

네임 스페이스 ASPNETCoreDI.Controllers

{

    [Produces ( "application / json")]

    [Route ( "api / Default")]

    공용 클래스 DefaultController : 컨트롤러

    {

        개인 읽기 전용 ITopicAreaService _topicAreaService;

        공용 DefaultController (ITopicAreaService topicAreaService)

        {

            _topicAreaService = topicAreaService;

        }

        [HttpGet]

        공용 IEnumerable GetAllTopicAreas ()

        {

            return _topicAreaService.GetAllTopicAreas ();

        }

    }

}

ASP.Net Core의 종속성 주입에 대한 기본 제공 지원을 활용하여 모듈 식이고 간결하며 깔끔하고 유지 관리 및 테스트가 쉬운 애플리케이션을 빌드 할 수 있습니다. ASP.Net Core의 기본 제공 종속성 주입 공급자는 StructureMap 및 Ninject와 같은 컨테이너만큼 기능이 풍부하지는 않지만 매우 빠르고 구성 및 사용이 쉽습니다.