문제

비즈니스 로직, 데이터 액세스 코드 등을위한 지원 클래스 라이브러리와 함께 ASP.NET 웹 사이트에서 작업하고 있습니다.

나는 Unity Framework와 종속성 주입에 매우 새롭고 익숙하지 않습니다. 그러나 CodePlex의 ASP.NET 3.5 포털 스타터 키트의 소스 코드를 따라 작업을 수행했습니다. 그러나 여기에는 문제가 있습니다.

클래스 라이브러리는 Unity가 설정되어 있으며 여러 클래스는 속성에 [종속성] 속성을 가지고 있습니다 (저는이를 위해서는 속성 세터 주입을 독점적으로 사용하고 있습니다). 그러나 Global.asax는 연합에 주사를 처리하는 방법 .... 클래스 라이브러리에서 방법을 알려줍니다.

이 모범 사례입니까 아니면 클래스 라이브러리가 다른 웹 사이트, 웹 앱 또는 응용 프로그램으로 라이브러리를 재사용 할 수 있도록 자체 주입을 처리해야합니까? 실제로 그렇다면이 경우 주입 코드는 어디로 갈까요?

질문이 얼마나 명확한 지 잘 모르겠습니다. 더 자세히 설명 해야하는지 알려주세요.

도움이 되었습니까?

해결책

Unity (StructureMap 사용자)에 익숙하지는 않지만 최종 매핑은 소비 애플리케이션에 살아야합니다. DLL을 사용하고있는 DLL이 해당 매핑을 정의 할 수 있지만 필요할 때도 무시할 수 있기를 원합니다. 말처럼 IFOO의 인스턴스가 필요하고 클래스 라이브러리에 매핑 된 사람이 있지만 웹 사이트에 살고있는 새로운 것을 추가했습니다. 사이트에 매핑을 정의하면 물건을 느슨하게 결합하거나 DI 컨테이너를 사용하는 이유는 무엇입니까?

다른 팁

개인적으로 나는 IOC 컨테이너를 용이하게하기 위해 물건을 코딩하고 코딩하지만 IOC 컨테이너를 프로젝트로 강제하려고 시도하지는 않습니다.

내 솔루션 분석은 대략적으로 진행됩니다. (각각은 프로젝트입니다).

  • Project.Domain
  • project.persistence.implementation
  • project.services.implementation
  • project.diinjectionregistration
  • project.aspnetmvcfrontend (MVC를 사용하지만 중요하지 않음).

프로젝트 참조에 대한 엄격한 경계를 유지하려고 노력합니다. 실제 프론트 엔드 프로젝트에는 *. 이식 프로젝트를 직접 포함시킬 수 없습니다. ( *. 이식 프로젝트에는이 경우 도메인의 인터페이스의 실제 구현이 포함되어 있습니다). 따라서 ASPNETMVCFrontend는 도메인과 Diinjectionwath and Di 컨테이너에 대한 참조를 가지고 있습니다.

Project.diinjection에서 모든 조각을 함께 묶습니다. 따라서이 프로젝트에는 구현 및 DI 프레임 워크에 대한 모든 참조가 있습니다. 구성 요소의 등록을 수행하는 코드가 포함되어 있습니다. AutoFac을 사용하면 구성 요소 등록을 쉽게 분석 할 수 있으므로이 접근 방식을 취했습니다.

여기의 예에서는 구현 프로젝트에서 컨테이너에 대한 언급이 없습니다. 아무 문제가 없으며 구현에 필요한 경우 계속하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top