애플리케이션에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!