7

우리는 현재 서비스 게이트웨이 역할을하는 nuget 패키지를 작성과 함께 Nuget 패키지 디자인. 그 책임은 외부 서비스에 대한 호출을 마무리하는 것이므로 올바른 방법으로 이루어지며 응답은 올바르게 처리됩니다. 이것의 목표는 새로운 클라이언트가 외부 서비스를 사용하려고 할 때 dev 시간 오버 헤드를 줄이는 것입니다.는 의존성 삽입 (Dependency Injection)

nuget 패키지는 외부 서비스의 용액에, '클라이언트'라는 하나의 프로젝트에서 구축됩니다. 따라서 클라이언트 프로젝트는 공용 도메인을 공유 할 수 있으며 게시 된 때 빌드 번호를 동기화하여 유지할 수 있습니다. 클라이언트 프로젝트는 제어 원칙의 반전을 적용합니다. 즉, 엔트리 포인트 (외부 서비스의 응답을 얻기위한 스택의 시작) 역할을하는 클래스는 많은 인터페이스 종속성을 갖습니다.

우리는 보통 우리의 IoC 컨테이너로 StrucutreMap을 사용하지만, 나는 우리가 의존성 주입 '내장'우리의 클라이언트 프로젝트를 구성하는 방법 궁금? 모든 소비자가 패키지의 종속성 해결을 철저히해야한다는 것이 잘못된 것 같습니다. 그러나 모든 클라이언트가 StructureMap을 사용해야하고 'ClientRegistry'(초기화 프로그램) 클래스를 자체 시작 논리에 추가해야하는 경우도 있어서는 안됩니다. 이 문제를 해결하기 위해 어떤 원칙이

이 있습니까? 아니면 IoC 원리를 바탕으로 구축 된 복잡한 누젠트 패키지의 좋은 예가 있을까요? 그것은 전체 IoC 컨테이너로 매우 풍부한 아니지만 그것은 당신의 포장 용기는 무관하게되며, 패키지의 소비자들이 선택의 IoC 컨테이너를 계속 사용할 수 있도록해야합니다 -

답변

2

당신은 CommonServiceLocator 사용할 수 있습니다.

도서관은 IOC의 컨테이너 및 서비스 로케이터를 통해 추상화를 제공한다. 라이브러리를 사용하면 응용 프로그램이 하드 참조에 의존하지 않고 기능에 간접적으로 액세스 할 수 있습니다. 이 라이브러리를 사용하면 타사 응용 프로그램과 프레임 워크가 특정 구현에 종속되지 않고 IoC/Service Location을 활용할 수 있기를 바랍니다. CSL은 해결 기능을 제공하지만 StructureMap와 통합 번째`MyNyGetPackage.Integration.StructureMap`를 추가 할 수

+1

참고. – Steven

+0

나는 CSL에 관한 약간의 독서를했는데 그 이익을 볼 수는 있지만 여전히 문제에 접근하는 방법에 대해서는 혼란 스럽다. 소비하는 응용 프로그램이 자체 IoC 설정에 '추가'할 수있는 IServiceLocator 구현을 노출해야합니까? 아니면 그냥 소비자의 기존 및 초기화 작업의 어떤 종류의 클라이언트 만 내부의 용기와'ServiceLocator.SetLocatorProvider'를 호출하는 CSL 기준에 의존합니까? 이 접근법으로 소비자 기존 컨테이너를 덮어 쓸 위험이 없는가? – Nick

+1

@ 닉 아 내가 어디에서 왔는지 알 것 같아. 이 경우 필자는 autofac을 내부적으로 사용하는 프로젝트 (예 : 내부적으로 설정하고 autofac은 어셈블리에 통합 됨)를 보았습니다. 그러면 프로젝트 객체가 외부 세계에 노출됩니다. 그런 다음 팩토리가 패키지 및 패키지 내용의 주요 진입 점이됩니다. – MattDavey

관련 문제