2012-09-12 3 views
2

모델 상태를 서비스에 삽입하고 싶습니다.Autofac - ModelState를 서비스에 삽입하십시오.

서비스

public ThirdPartyService(IValidationDictionary dict) 
{ 
    // IValidationDictionary, in this case is a ModelStateWrapper object 
    // I created to wrap model state 
} 

등록

builder.Register(x => new ModelStateWrapper(x.Resolve<ControllerType>().ViewData.ModelState)) 
     .As<IValidationDictionary>().InstancePerHttpRequest(); 

어떤 아이디어가?

답변

2

이것은 InstancePerHttpRequest로 이해가되지 않습니다.

많은 컨트롤러가있을 수 있으며 단일 Http 요청 중에 많은 모델 상태가있을 수 있습니다. 현재 ControllerContext 객체에 액세스 할 수 있다고해도 (예 : HttpContext.Current), 생성하는 코드는 디자인으로 인해 버그와 오작동을 일으키기 쉽습니다.

interface IHttpRequestModelStates 
{ 
    ICollection<string, ModelState> ModelStates {get; set;} 
    // you can retrieve Controller:Home/Index model state 
    // using ModelStates["HomeIndex"] 
} 
: 내가 제안 무엇

현재의 모든 ModelState를 저장하고 (일반 바보 예)와 같은 컨트롤러 액션 키를 검색 할 수있는 메모리 서비스와 같은 저장소를 만드는 것입니다