Unity 애플리케이션 블록 작업

Castle Windsor 및 StructureMap과 유사하게 Unity Application Block은 IoC (Inversion of Control) 컨테이너이기도합니다. Microsoft의 Unity 애플리케이션 블록은 경량의 확장 가능한 종속성 주입 컨테이너입니다. 생성자 주입, 속성 주입 및 메서드 호출 주입을 지원합니다. 덧붙여서 Unity 애플리케이션 블록은 엔터프라이즈 라이브러리의 일부로 도입되었습니다.

종속성 주입 및 제어 반전이 무엇인지 잘 모르는 경우 여기에 간단한 설명이 있습니다. 의존성 주입은 IoC 원칙의 실현입니다. 제어 반전과 종속성 주입은 모두 애플리케이션의 구성 요소 간의 종속성을 끊을 수있는 방법입니다. 의존성 주입 원칙은 애플리케이션의 상위 레벨 모듈이 하위 레벨 모듈에 의존해서는 안된다고 말합니다. 오히려 둘 다 추상화에 의존해야합니다.

Unity 애플리케이션 블록 디자인 목표

Unity 애플리케이션 블록은 DI (종속성 주입) 컨테이너입니다. Unity 애플리케이션 블록은 엔터프라이즈 라이브러리 구성 시스템에 대한 종속성이 없습니다. 따라서 시스템에 설치되는 엔터프라이즈 라이브러리 대신 독립 실행 형 종속성 주입 컨테이너로 사용할 수 있습니다. Unity Application Block의 디자인 목표는 다음과 같습니다.

  1. 디커플링을 통한 모듈 식 설계 촉진
  2. 빠르고 확장 가능하며 가벼운 의존성 주입 용기 제공
  3. 확장을 통한 확장 성 지원 제공
  4. 속성 기반 주입에 대한 지원 제공
  5. 종속성 주입 컨테이너에 연결하고 작업 할 수있는 직관적 인 API에 대한 지원을 제공합니다.

시작하기

이 섹션에서는 애플리케이션에서 Unity 애플리케이션 블록을 사용하는 방법을 살펴 봅니다. 첫 번째 단계는 시스템에 Unity 애플리케이션 블록을 설치하는 것입니다. 이 라이브러리를 설치하는 가장 쉬운 방법은 NuGet을 사용하는 것입니다. 이 그림의 목적을 위해 여기서는 콘솔 애플리케이션 프로젝트를 사용합니다. Unity Application Block을 사용하여 첫 번째 애플리케이션을 빌드하려면 다음 단계를 따르세요.

  1. Visual Studio IDE 열기
  2. 콘솔 프로젝트를 만들고 이름으로 저장
  3. 솔루션 탐색기 창에서 프로젝트를 마우스 오른쪽 단추로 클릭하십시오.
  4. "NuGet 패키지 관리 ..."를 선택합니다.
  5. Unity NuGet 패키지 관리자 설치

이것이 Unity 사용을 시작하기위한 단계를 설정하는 데 필요한 모든 것입니다. 이제 프로젝트에서 Unity Application Block을 사용할 준비가되었습니다.

Unity 컨테이너를 사용하여 개체 종속성 생성 및 해결

Unity 컨테이너를 사용하여 다음 코드 스 니펫에 표시된 것처럼 특정 개체에 대한 종속성을 쉽게 해결할 수 있습니다.

IUnityContainer container = new UnityContainer();

container.RegisterType();

container.RegisterType();

Unity 컨테이너에 개체 유형을 등록 할 때 수명을 지정할 수 있습니다. 아무 것도 지정하지 않으면 기본 수명이 사용됩니다. 수명 관리자는 등록 된 개체의 수명을 제어합니다. Unity 애플리케이션 블록에서 지원하는 수명 관리자 유형에는 TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager 및 ExternallyControlledLifetimeManager가 있습니다.

ILogger라는 다음 인터페이스를 고려하십시오.

public interface ILogger

   {

       string GetLogTypeName();

   }

ILogger 인터페이스에는 GetLogTypeName ()이라는 하나의 메서드 선언이 포함되어 있습니다. FileLoger, DatabaseLogger 및 EventLogger 클래스 (아래에 제공됨)는 ILogger 인터페이스를 구현합니다.

public class FileLogger : ILogger

   {

       public string GetLogTypeName()

       {

           return "File Logger";

       }

   }

   public class DatabaseLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Database Logger";

       }

   }

   public class EventLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Event Logger";

       }

   }

다음 코드 목록은 UnityContainer를 사용하여 종속성을 해결하는 방법을 보여줍니다.

static void Main(string[] args)

{

IUnityContainer container = new UnityContainer();

container.RegisterType();

ILogger iLogger = container.Resolve();

string logType = iLogger.GetLogTypeName();

Console.WriteLine(logType);

Console.Read();

}

Unity 애플리케이션 블록의 "컨테이너"는 종속성을 생성하고 주입하는 데 사용할 수있는 객체입니다. RegisterType 메서드를 사용하여 Unity 컨테이너에 유형 또는 유형 매핑을 등록 할 수 있습니다. Resolve () 메서드는 T를 사용하여 언급 된 제네릭 형식에 대해 등록 된 형식의 구체적인 인스턴스를 반환하는 데 사용됩니다. 위에 제공된 코드 예제에서 Resolve () 메서드는 FileLogger 클래스의 인스턴스를 반환합니다.

Unity 통합을 지정하는 다른 접근 방식은 구성을 통한 것입니다. Unity 구성에 Container라는 컨테이너를 지정했다고 가정하면 다음 코드 스 니펫은 코드의 컨테이너 인스턴스에서 LoadConfiguration 메서드를 호출하는 방법을 보여줍니다.

string containerName = "Container";

IUnityContainer container = new UnityContainer().LoadConfiguration(containerName);