NInject를 사용하여 WebAPI에서 DI를 구현하는 방법

종속성 주입은 느슨하게 결합 된 테스트 가능한 구성 요소를 사용하여 애플리케이션에서 플러그 형 구현을 빌드하는 데 도움이되는 소프트웨어 디자인 패턴입니다. 형식 간의 하드 코딩 된 종속성을 제거하고 시간이 지남에 따라 형식을보다 쉽게 ​​빌드, 테스트 및 유지 관리 할 수 ​​있습니다. IOC (Inversion of Control) 디자인 패턴은 객체가 어떤 활동을 수행하기 위해 의존하는 객체를 생성해서는 안된다고 말합니다.

개체의 자동 인스턴스화 및 수명주기 관리에 도움이되는 많은 IOC 컨테이너가 있습니다. 종속성 주입은 IOC 원칙의 하위 집합입니다. IOC 컨테이너는 종속성 주입을 활용하여 제어 흐름을 반전시킵니다.

시작하기

이 구현을 시작하려면 Visual Studio에서 새 WebAPI 프로젝트를 만듭니다. 다음으로 NInject를 사용하기 위해 NuGet에서 필요한 패키지를 설치합니다. NuGet 패키지 관리자를 통해 Ninject.Web.WebApi.WebHost 패키지를 설치할 수 있습니다. 그러면 다음 두 패키지가 설치됩니다.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

NInject를 사용한 의존성 주입

Ninject.Web.WebApi.WebHost 패키지가 성공적으로 설치되면 NInject.WebCommon.cs 파일이 프로젝트의 App_Start 폴더에 자동으로 생성됩니다. 많은 상용구 코드가 생성 될 것입니다. 무시하고 RegisterServices () 메서드를 참조하십시오. 언뜻보기에이 방법의 모습은 다음과 같습니다.

private static void RegisterServices(IKernel kernel)

{

}

서비스를 등록하거나 종속성을 삽입하려면 RegisterServices 메서드에 코드를 작성해야합니다. 이 기사의 뒷부분에서 이에 대해 다시 설명하겠습니다.

이 예제에서는 생성자를 통해 하나 이상의 종속성이 주입되는 종속성 주입 유형 인 생성자 주입을 사용합니다. 다른 두 가지 유형의 종속성 주입에는 세터 주입과 인터페이스 주입이 있습니다. 나는 이전 게시물 중 하나에서 이것을 자세히 다루었습니다.

다음 단계로 생성 한 WebAPI 프로젝트에 AuthorsController라는 새 컨트롤러를 생성합니다. AuthorsController의 기본 코드를 아래 제공된 코드로 바꿉니다.

public class AuthorsController : ApiController

    {

        private readonly IAuthorRepository repository;

        public AuthorsController(IAuthorRepository repository)

        {

            this.repository = repository;

        }

        public List Get()

        {

            return repository.GetAllAuthors();

        }

    }

AuthorsController에는 IAuthorRepository 인터페이스에 대한 읽기 전용 참조, 인수 생성자 및 Get 작업 메서드가 포함되어 있습니다. AuthorsController는 생성자를 사용하여 종속성을 주입합니다. 즉, IAuthorRepository 인터페이스에 대한 참조를 매개 변수로 받아들이는 인수 생성자입니다. IAuthorRepository 인터페이스는 AuthorRepository 클래스에 의해 구현됩니다. 다음은 IAuthorRepository 인터페이스의 모습입니다.

public interface IAuthorRepository

    {

        List GetAllAuthors();

    }

GetAllAuthors () 메서드는 작성자 목록을 반환하는 데 사용됩니다. 작성자 이름은 하드 코딩됩니다. AuthorRepository 클래스는 아래와 같이 GetAllAuthors 메서드를 구현합니다.

public class AuthorRepository : IAuthorRepository

    {

        public List GetAllAuthors()

        {

            List authors = new List();

            authors.Add("Joydip");

            authors.Add("Pete");

            authors.Add("Steve");

            return authors;

        }

    }

Ninject에 서비스 등록

이 단계는 아주 간단합니다. 앞서 RegisterServices 메서드에 대해 논의한 것을 기억하십니까? 이것은 NinjectWebCommon.cs 파일의 정적 클래스 NinjectWebCommon에 속합니다. RegisterServices 메서드를 사용하여 종속성을 해결하는 방법은 다음과 같습니다.

private static void RegisterServices(IKernel kernel)

{

   kernel.Bind().To();   

그게 당신이해야 할 전부입니다. NInject와 관련된 런타임 오류가 표시되는 경우 ActivationException으로 인한 것일 수 있습니다. 이 문제를 해결하려면 최신 버전의 Ninject.Web.WebApi 패키지를 설치해야합니다. Ninject.Web.WebApi를 다시 업그레이드하고 다시 컴파일 한 다음 애플리케이션을 다시 실행하십시오.

WebAPI와 함께 NInject를 사용하는 방법에 대한 추가 정보는이 게시물을 참조하십시오.