2017-04-05 4 views
1

IoC 용 Unity를 사용하고 있으며 How not to do dependency injection에 나와있는 원칙을 따르기를 원합니다. 그래서 전역 적으로 사용할 수있는 컨테이너가없고 코드 전체에 mContainer.Resolve<Type>()이 없지만 생성자가 주입됩니다.적절한 컨테이너 선택 Unity

제 문제는 이러한 원칙을 여러 컨테이너에 적용하는 것입니다. 내 응용 프로그램은 많은 제품 (공유 모델을 따르는 객체)을 비교하며 각 제품은 자체 컨테이너로 구성됩니다.

저는 '제품'(많은 어린이가있는 객체로 볼 수 있음)을 만드는 방법을 찾고 있습니다. 컨테이너를 지정하지 않고 자체 컨테이너를 사용합니다. 이 컨테이너는 하위 컨테이너 또는 명명 된 컨테이너 일 수 있습니다. 어떤 차이가 있다고 생각하지 않습니까?

화합 확장을 살펴 보았지만 아직 답을 찾지 못했습니다.

+0

모든 개체에 대해 다른 컨테이너가 필요합니까? 내가 뭔가를 잘못 해석했다고 확신하지만, 좀 더 명확히 해줄 수 있니? – Tipx

+0

** 모든 ** 객체에 대한 컨테이너가 필요하지 않습니다. 그러나 여러 개의 '제품'(동일한 클래스 계층 구조에서 파생되지만 특정 세부 정보로 인해 다르게 동작하는 개체)가 있습니다. 모든 제품은 자체 컨테이너를 사용하여 자체 파생 클래스를 등록해야합니다. – Moolie

+1

음, 공연 ​​목적으로 여러 개의 컨테이너가있는 것을 이해할 수 있지만, 두 개의 다른 컨테이너에있는 두 엔티티 사이에 링크가 있으면 곧 좋은 시간을 갖지 못할 것입니다. 같은베이스/추상 클래스의 다른 구현에서는, 적절한 해상도가 단지 실행시에만 알려지는 경우, 명명 된 등록을 사용하거나 경우에 따라서는 팩토리를 사용합니다. – Tipx

답변

0

이 질문을 쓰면서, 필자는 기존 코드 기반에 종속성 주입을 도입하면서 세부 사항에서 다소 분실했습니다. 그 문제는 너무 잘 쓰여진 것이 아니었고 당시에 알고 있었지만 문제에 대한 나의 설명을 향상시키는 방법을 알지 못했습니다.

내가 말한대로, 여기 내 문제를 해결하는 방법이 있습니다.

앞서 말했듯이 여러 제품을 비교하는 응용 프로그램이 있습니다. 이러한 제품은 동일한 인터페이스의 다중 구현으로 볼 수 있습니다. 따라서 이러한 여러 구현을 동시에 사용해야합니다. 이러한 모든 제품은 실제로 여러 개의 종속성이있는 복잡한 개체이며 이러한 개체의 대부분은 런타임 데이터로 생성되므로 구성 주입으로 생성되지 않습니다.

제 생각에는 생성자 삽입으로 생성되지 않은 개체가 있습니다. 필요할 때까지는 현재 제품의 컨텍스트를 잃어 버렸고 해당 제품에 적합한 유형을 만들 수 없었습니다.

제품마다 특정 인터페이스에 필요한 구현을 정의하기 위해 모든 제품에 대해 하위 컨테이너를 만들었습니다.

어느 시점에서 저는 제품 인스턴스를 만들고 있습니다. 이 코드는 코드에서 컨테이너 (예 : 제품 X의 하위 컨테이너를 제공)를 요청하는 유일한 장소입니다. 필자가해야 할 일은 (적절한 컨테이너에 대한 참조를 가진) 팩토리 객체를 생성하여 생성자 주입이 아닌 동적으로 구성 요소를 확인하는 데 필요한 모든 객체에 전달하는 것이 었습니다.

누락 된 링크입니다. 나는 공장이 실제로 컨테이너를 알아야하는지 궁금하지만, 나는 그걸로 살 수있다.

나는이 사람을 도움이되기를 바랍니다.