캐슬 윈저를 처음 접했고 최신 버전을 사용 중입니다. 잘 작동하는 리포지토리에 대한 항목을 만들었지 만 컨트롤러에 전달할 최종 종속성이 하나 있습니다.캐슬 윈저에서 IValidationDictionary에 대한 IOC
IValidationDictionary에서 상속받은 ModelStateWrapper를 만들었습니다.
var v = new Mock<ModelStateDictionary>();
_validationService = new ModelStateWrapper(v.Object);
_service = new MembershipService(_validationService);
내가 할 수있는 ': 다음이 사용 MOQ을 할 수있는 내 테스트에서
IMembershipService _memSvc;
IValidationDictionary _validationService;
public AccountController()
{
_validationService = new ModelStateWrapper(this.ModelState);
_memSvc = new MembershipService(_validationService);
}
: 내 코드에서 나는 예를 들어 다음 통과 할 수 있도록 ModelStateWrapper 그것의 생성자에 ModelStateDictionary 소요 Castle이 ModelState를 ModelStateWrapper에 삽입하는 것으로 보입니다. 어디서 시작 해야할지 전혀 모르겠다. 단지 '무시하고'수동으로 삽입하려고 시도 할 수 없다. 성은 종속성을 검색하고 의존성이 남아 있다고 말하는 오류를 던진다.
Castle Windsor를 IValidationDictionary 기반의 ModelStateWrapper를 사용하도록 구성하고 ModelState를 생성자 매개 변수로 포함하려면 어떻게해야합니까? 당신이 순환 종속성 (결코 좋은 일을) 가지고있는 것처럼
로이드
그래서 것처럼 내 계정 컨트롤러보기 : IMembershipService _memSvc; IValidationDictionary _validationService; public AccountController (IValidationDictionaryFactory validationDFactory) { validationDFactory.Create (this); } 만약 그렇다면 조롱 한 모델 상태의 테스트에서 어떻게 실행합니까? 죄송합니다. 어리석은 질문 인 경우 종속성 주입 일이 하루 밖에 없습니다. – lloydphillips
DI에 대한 가장 쉬운 접근법은 가능할 때마다 생성자 삽입을 사용하므로 모든 종속성을 생성자를 통해 주입하는 것입니다. 필요한 경우 Test Doubles로 대체 할 수도 있습니다. 추상 팩토리는 유선 연결시 종속성이 없을 때의 솔루션입니다. 거기에는 여러 가지 이유가있을 수 있습니다. –