Windows 응용 프로그램 프로젝트에서 StructureMap을 사용하기 시작했습니다. 기본 학습에 대한 작업에서 동일한 목표를 달성하는 내 솔루션을 마련하는 2 가지 방법을 찾았습니다.이 2 가지 옵션 중 하나가 더 나은 옵션으로 보이고 그 이유가 누구인지에 대해 의견을 말할 수 있는지 궁금합니다.StructureMap을 사용하여 다른 프로젝트 조직보다 우수한 프로젝트 조직 중 하나입니까?
여기서 목표는 IOC를 사용하여 두 서비스를 종속성없이 사용하는 것이 었습니다. 그래서 비즈니스 계층에 인터페이스를 만든 다음 인프라 프로젝트에서 이러한 인터페이스를 구현하고 그 시점에서 실제 서비스를 래핑했습니다.
내 첫 번째 시도에서 유창한 인터페이스 (누군가가 IServiceA를 원할 때 ServiceX의 인스턴스를 제공)를 사용하여 구조 맵을 초기화하는 코드가있는 DependencyResolver 프로젝트를 만들었습니다. DependencyResolver의 초기화가 내 응용 프로그램에서 쫓겨 될 필요가 있기 때문에, 나는 응용 프로그램에서 참조는 다음과 같이 DependencyResolver해야 :
을 그럼 내가 DependencyResolver 내 참조를 제거하고 의존 할 수 있다는 것을 발견 StructureMap 스캐너 및 런타임에 해당 참조를 얻기 위해 명명 규칙에 그럼 내 설정은 다음과 같습니다
을 그럼, 내가 사용하던 서비스로 아래로, 더 명명 규칙을했다이었다 할 수있어 DependencyResolver를 함께 사용하면됩니다. 이 시점에서, 나는 완전히 structuremap 스캐너와 명명 규칙에 의존하고 올바르게 가지 설정을 얻을 수 있습니다 :
겠어요 - 여기에 나는이 3 가지 옵션에 대해 어떻게 생각해야하는지 잘 모릅니다. 옵션 1은 좋은 것으로 보이지만, UI를 사용하여 간접적으로 참조해야하는 모든 사항을 StructureMap을 사용하여 간접적으로 참조했습니다. 그러나이 이 실제로 일지는 확실하지 않습니다.
옵션 2는 DependencyResolver에 대한 참조 필요성을 제거하고 해당 프로젝트의 클래스에 액세스하기 위해 이름 지정 규칙을 사용하며 나머지 설정은 여전히 제어 할 수 있습니다 (단, 내 응용 프로그램에서 직접 structureMap에 대한 의존성).
옵션 3이 가장 쉽고 (모든 이름을 특정 방식으로 지정하고 어셈블리를 스캔하는 것), 그러나 또한 오류가 발생하기 쉽고 부서지기 쉬운 것처럼 보입니다. 특히 IServiceAbc => ServiceAbc보다 좀 더 복잡한 것을하고 싶다면.
그럼,이 기사를 많이 읽은 경험이있는 분이라면 조언을 해줄 수 있습니까?
내 앱에서 내 서비스로의 간접 참조를 피하고 있어야하며, 그렇다면 실제 이점은 무엇입니까? 명명 규칙을 사용하여 모든 작업을 수행하는 것이 단순한 프로젝트에서만 현명한 방법일까요?
내가 여기에서하려고하는 것을 수행하기위한 표준 패턴이 있습니까? 긴 게시물에 대한 죄송합니다
응용 프로그램 자체에 넣으면 내 응용 프로그램은 해당 어셈블리를 설정하기 위해 해당 어셈블리에 액세스하는 데 사용 된 모든 코드가 인터페이스를 통해 수행 된 경우에도 프로젝트의 모든 어셈블리를 직접 참조해야합니다. 컨테이너. 이상하지 않은가 보지 않습니까? 아마도 별 문제가 아니지만 앱 및 도메인/비즈니스 계층에 제 3 자 서비스에 대한 언급이없는 것이 더 조직적으로 보입니다. – chrismay
그런 이유로 도메인 모델을 별도의 어셈블리에 넣으려고합니다. –
이 아키텍처 분리에는 더 정교함이 필요합니다. –