Autofac - 将ModelState注入服务

时间:2012-09-12 17:57:44

标签: asp.net-mvc-3 autofac

我希望能够将模型状态注入服务。

服务

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();

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这作为InstancePerHttpRequest没有意义。

可能有很多控制器,在单个Http请求中可能存在很多模型状态。即使您通过参考ControllerContext访问当前的HttpContext.Current对象,您将生成的代码也容易因设计而出现错误和故障。

我建议创建一个内存服务类存储库来存储所有当前的ModelState,并通过控制器操作键检索它们,例如(简单的愚蠢示例):

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