2012-09-12 90 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請求期間可以有很多模型狀態。即使您通過參考HttpContext.Current訪問目前的ControllerContext對象,您將生成的代碼也容易出現由於設計而導致的錯誤和故障。

我建議什麼是創建一個內存中的服務類信息庫來存儲所有當前的ModelState和像(平原愚蠢的例子)控制器動作鍵檢索它們:

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