Unity의 종속성 주입: 생성자 주입과 싱글톤 또는 인수 전달
Unity와 같은 종속성 주입 프레임워크를 활용할 때 중요한 고려 사항이 발생합니다. 애플리케이션의 더 깊은 계층 내에서 종속성을 해결하는 방법에 대해 설명합니다.
제시된 시나리오에서 TestSuiteParser 클래스에는 TestSuite 및 TestCase 인스턴스에 대한 액세스가 필요합니다. 이 문제를 해결하기 위해 다음과 같은 몇 가지 접근 방식을 모색합니다.
싱글톤 Unity 컨테이너
Unity 컨테이너를 저장하기 위한 싱글톤을 생성하면 코드베이스의 어디에서나 컨테이너에 액세스할 수 있습니다. 그러나 이 접근 방식은 컨테이너 자체에 대한 종속성을 도입하므로 이상적이지 않습니다.
Unity 컨테이너를 인수로 전달
Unity 컨테이너를 모든 개체에 인수로 전달 종속성이 필요한 클래스는 번거롭고 시각적으로 불쾌할 수 있습니다.
생성자 주입
의존성 주입에 선호되는 솔루션은 생성자 주입입니다. 이 패턴에서는 아래 TestSuiteParser 클래스에 설명된 것처럼 종속성이 클래스 생성자의 매개 변수로 선언됩니다.
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)); } // ... }
생성자 주입을 사용하면 클래스의 인스턴스가 다음과 같을 때 컨테이너에 의해 종속성이 자동으로 해결됩니다. 생성되었습니다. 이 접근 방식은 클래스가 인스턴스화 시 사용 가능한 필수 종속성을 갖도록 보장합니다.
컴포지션 루트에서 Unity 컨테이너는 다음과 같이 구성될 수 있습니다.
container.RegisterType<TestSuite, ConcreteTestSuite>(); container.RegisterType<TestCase, ConcreteTestCase>(); container.RegisterType<TestSuiteParser>(); var parser = container.Resolve<TestSuiteParser>();
컨테이너가 TestSuiteParser 인스턴스를 확인할 때 , TestSuite 및 TestCase를 자동으로 주입합니다. dependency.
결론
생성자 주입은 싱글톤 또는 인수 전달 접근 방식의 단점을 제거하여 단일체로 종속성을 해결하는 깔끔하고 효율적인 방법을 제공합니다. 이 접근 방식은 느슨한 결합을 촉진하고 애플리케이션의 테스트 가능성을 향상시킵니다.
위 내용은 생성자 주입과 싱글톤 또는 Unity의 인수 전달: 어떤 종속성 주입 접근 방식이 가장 좋습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!