> 백엔드 개발 > C++ > 적절한 종속성 주입을 위해 내 애플리케이션에서 Unity 컨테이너에 어떻게 액세스해야 합니까?

적절한 종속성 주입을 위해 내 애플리케이션에서 Unity 컨테이너에 어떻게 액세스해야 합니까?

DDD
풀어 주다: 2024-12-29 13:11:14
원래의
452명이 탐색했습니다.

How Should I Access the Unity Container in My Application for Proper Dependency Injection?

애플리케이션에서 Unity 컨테이너 액세스를 처리하는 방법

Unity와 같은 종속성 주입 프레임워크를 사용할 때는 액세스를 처리하는 방법을 고려하는 것이 중요합니다. 애플리케이션 내의 컨테이너에 추가합니다. 이 질문은 세 가지 옵션을 탐색하고 종속성 주입 원칙에 따른 최선의 접근 방식을 조사합니다.

싱글톤 컨테이너:

애플리케이션 어디에서나 액세스할 수 있는 싱글톤 컨테이너를 만드는 것은 다음과 같습니다. 편리해 보입니다. 그러나 종속성 주입 프레임워크를 사용하기 위해 컨테이너에 종속성을 도입하는 것은 DI 원칙에 위배됩니다.

컨테이너 전달:

Unity 컨테이너를 하위 클래스에 전달하면 번거롭고 시각적으로 매력적이지 않게 됩니다. 또한 긴밀한 결합을 도입하고 코드를 독립적으로 테스트하기 어렵게 만듭니다.

생성자 주입:

DI에 대한 올바른 접근 방식은 생성자 주입을 사용하는 것입니다. 여기에는 생성자에서 클래스에 필요한 종속성을 선언하는 작업이 포함됩니다. Unity는 클래스의 인스턴스를 생성할 때 이러한 종속성을 자동으로 연결합니다.

예:

질문에 제공된 예를 고려하세요.

public class TestSuiteParser
{
    private readonly TestSuite _testSuite;
    private readonly TestCase _testCase;

    public TestSuiteParser(TestSuite testSuite, TestCase testCase)
    {
        _testSuite = testSuite ?? throw new ArgumentNullException(nameof(testSuite));
        _testCase = testCase ?? throw new ArgumentNullException(nameof(testCase));
    }

    public TestSuite Parse(XPathNavigator someXml)
    {
        // Use the injected dependencies here
        foreach (XPathNavigator blah in aListOfNodes)
        {
            _testSuite.TestCase.Add(_testCase);
        }
    }
}
로그인 후 복사

컴포지션 루트에서 다음과 같이 Unity를 구성합니다.

container.RegisterType<TestSuite, ConcreteTestSuite>();
container.RegisterType<TestCase, ConcreteTestCase>();
container.RegisterType<TestSuiteParser>();
로그인 후 복사

생성자 사용 주입하면 Unity는 자동으로 필요한 종속성을 TestSuiteParser 클래스에 주입하여 적절한 DI와 테스트 용이성을 보장합니다.

위 내용은 적절한 종속성 주입을 위해 내 애플리케이션에서 Unity 컨테이너에 어떻게 액세스해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿