내 종속성 주입 컨테이너를 저장/참조해야하는 이유가 궁금합니다. 컨테이너를 정적 클래스에 정적 속성으로 유지하는 것이 좋습니까? 아니면 컨테이너를 애플리케이션의 인스턴스 변수로 가져야합니까? 각 옵션의 장점과 단점이 무엇인지 궁금하네요. 웹, mvc, 콘솔 및 Windows 응용 프로그램에서 가장 좋은 방법은 무엇입니까?DI 컨테이너에 대한 참조는 어디에 저장해야합니까?
답변
응용 프로그램에 인스턴스 변수로 저장하는 것이 좋습니다. 전역 적으로 액세스 할 수있는 싱글 톤으로 만드는 정적 속성을 사용하면 응용 프로그램의 종속성을 숨 깁니다. 이는 의존성 주입 컨테이너를 사용하여 멀리 떨어져 나가려하는 것 중 하나입니다!
그렇다면 프레임 워크로 인해 응용 프로그램 인스턴스에 액세스하는 것이 어려워지면 정적 변수를 사용하는 것이 세계 끝이 아닐 수도 있습니다.
나는 Sternal 씨에게이 사실에 동의합니다. 한 가지 고려해야 할 것은 DI 컨테이너가 IDisposable을 구현하기 때문에 정상적인 프로그램 종료시 컨테이너를 폐기하고자하는 것입니다. How do you reconcile IDisposable and IoC?
또한 응용 프로그램 전체에서 DI 컨테이너에 의존성이 분산되는 것을 피하는 것이 가장 좋습니다. 즉, 컨테이너를 전역 적으로 사용할 수 있도록 (싱글 톤, 정적 속성 또는 주입 된) 컨테이너를 Service Locator으로 사용하지 않도록하십시오.
대신 종속성의 종속성을 해결하는 컨테이너 기능을 사용할 수 있습니다. 예를 들어 응용 프로그램 시작시 컨테이너를 만들고이 컨테이너를 사용하여 MVC에서 모델을 구성 할 수 있습니다. 모델은 저장소 및 웹 서비스에 의존 할 수 있습니다. 저장소는 로거에 의존 할 수 있습니다. 모델이 구축 될 때 컨테이너가이 모든 것을 해결합니다. 모델이 종속성 인스턴스를 즉석에서 작성해야하는 경우, 팩토리를 팩토리에 삽입하십시오.
동의하고, 한 포스터가 Mauricio가 파헤친 속임수 중 하나에 그것을 어떻게 넣었는지를 좋아합니다. "IOC 컨테이너를 프로세스의 최상위 레벨/진입 점에 놓고 그 아래에있는 모든 것에 종속성을 주입하는 데 IOC 컨테이너를 사용합니다." (http://stackoverflow.com/questions/480286/best-practices-for-ioc-container) –
@Jeff - 멋진 견적; 간단하고 요점. Thorsten Lorenz가 Mauricio의이 링크에도 훌륭한 답을 얻었습니다. http://stackoverflow.com/questions/480286/best-practices-for-ioc-container – TrueWill
컨테이너를 최상위 수준에 놓으면, 이것은 아마 주사 (데이터 액세스 아마도)를 요구하는 가장 낮은 수준의 어셈블리에 대한 참조를 보유 할 필요성을 창출합니다. 이것은 나를 조금 괴롭힌다 :( – dougajmcdonald
- 1. IObservable에 대한 참조는 어디에 있습니까
- 2. DI 및 IoC 컨테이너에 대한 질문
- 3. MVC에서 모델 클래스에 대한 참조는 어디에 두겠습니까?
- 4. 라이센스 파일을 어디에 저장해야합니까?
- 5. vb.net 프로그래머를위한 최고의 DI-IOC 참조는 무엇입니까?
- 6. 데이터베이스 파일은 어디에 저장해야합니까?
- 7. Zend_Navigation 컨테이너는 어디에 저장해야합니까?
- 8. 프로젝트에서 이미지를 어디에 저장해야합니까?
- 9. IIS 파일을 어디에 저장해야합니까?
- 10. 민감한 변수는 어디에 저장해야합니까?
- 11. 데이터 컨테이너에 "저장해야합니까?"메커니즘을 구현하려면 어떻게해야합니까?
- 12. Eclipse 타사 플러그인은 어디에 저장해야합니까?
- 13. Windows에 실행 파일은 어디에 저장해야합니까?
- 14. 양식 필드 '힌트'데이터는 어디에 저장해야합니까?
- 15. iPhone에서 선택한 이미지는 어디에 저장해야합니까?
- 16. 응용 프로그램 데이터는 어디에 저장해야합니까?
- 17. android XML UI 레이아웃에 대한 참조는 어디에 있습니까?
- 18. 파일에서 가져온 데이터를 어디에 표시하거나 저장해야합니까?
- 19. ASP.NET 응용 프로그램에서 구성 정보를 어디에 저장해야합니까?
- 20. 사진을 어디에 저장해야합니까? 파일 시스템 또는 데이터베이스?
- 21. 아이폰 세션 관련 정보는 어디에 저장해야합니까?
- 22. 팀 빌드를위한 공통 대상은 어디에 저장해야합니까?
- 23. iPhone 앱 : 설정 파일은 어디에 저장해야합니까?
- 24. DI/IOC에 대한 매개 변수를 어떻게 주문해야합니까?
- 25. Java에서 Class.class에 대한 참조는 무엇을합니까?
- 26. 웹 응용 프로그램 프로젝트 어셈블리 참조는 어디에 저장됩니까?
- 27. 컨테이너에 대한 shared_ptr의 의미는 무엇입니까?
- 28. DI 외부 DLL 사용
- 29. OpenID에 대한 연결 체계를 저장해야합니까?
- 30. ASP.NET에 저장된 구성 요소 (dll) 참조는 어디에 있습니까?
중복 : http://stackoverflow.com/questions/644747/autofac-in-web-applications-where-should-i-store-the-container-for-easy-access http://stackoverflow.com/ 질문/277438/추상 - ioc- 컨테이너 - 배후 - 싱글 톤 - 그것 - 잘못 - http://stackoverflow.com/questions/480286/best-practices-for-ioc-container http://stackoverflow.com/ 질문/367178/ioc-containers-specific-windsor http://stackoverflow.com/questions/1612682/typical-ioc-container-usage-passing-data-down-the-line –
모두에게 감사드립니다! 모든 복제본에 대해 유감스럽게 생각합니다. 이것은 dup이라고 생각했지만 질문을 찾기 위해 문구를 사용하는 방법을 잘 모르겠습니다. –