저는 솔루션에서 IoC를 구현하기 위해 Autofac을 사용하고 있습니다.하지만 제가 올바르게하고 있는지 아닌지는 의문입니다. 이 시나리오는 다음과 같습니다.
Manager
클래스는 모두 BaseManager
클래스에서 파생됩니다. BaseManager
에는 protected User CurrentUser
필드가 있습니다. 내가하려는 일은 Autofac을 사용하여 CurrentUser
을 해결하는 것입니다. IUserProvider
인터페이스를 작성하고 몇 가지 클래스 (예 : WebUserProvider
및 WinformsUserProvider
)를 구현했습니다. ? 내가 싱글 또는 서비스 로케이터 패턴을 사용할 수 있습니다) 나는 의존성 (내 수업에 액세스 container
를 해결할 수있는 방법올바른 방법으로 의존적 인 주입 사용
builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();
- 하지만 보인다
그럼 예를 들어,Global.asax)
에 (아래 내 업체 등록 그것이 anti-pattern을처럼. 어떻게 내가 내 의존성을 해결해야합니까?이 나에게 overengineering 같은 소리
로깅 목적 때문에 BaseManager를 정의하고 거기에 CurrentUser를 초기화해야했습니다. (나는 현재 관리자 클래스의 모든 메소드에 현재 사용자를 전달하고 싶지 않습니다.) "컨테이너는 한 번에 한 곳에 초기화해야합니다"라고 말했으므로 Service Locator와 싱글 톤이 안티 패턴 인 경우 초기화 할 항목과 단일 컨테이너에 액세스 하시겠습니까? – Kamyar
이것은 WinForms 앱인 경우 엔트리 포인트 (main method)에 가까운 곳에서 컨테이너를 만들고 설정할 수 있습니다. 메인에서는 인터페이스를 해석하여 멤버에게 전달합니다. ASP.NET에서는 global.asax에서 설정 한 다음 [예]와 같이 팩토리를 등록 할 수 있습니다 (http://stackoverflow.com/questions/5124393/setting-up-inversion-of-control-ioc). -in-asp-net-mvc-with-castle-windsor)를 사용합니다. 따라서 DI와 IoC에서는 모든 종속 클래스가 추상화 된 추상화를 가지고 있으며 명시 적으로 요청하지 않습니다. – oleksii