我希望能够将模型状态注入(inject)到服务中。
服务
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();
有什么想法吗?
最佳答案
这作为 InstancePerHttpRequest 没有意义。
在单个 Http 请求期间可以有很多 Controller 并且可以有很多模型状态。即使您通过 HttpContext.Current
中的引用访问当前的 ControllerContext
对象,您将生成的代码也很容易因设计而出现错误和故障。
我建议创建一个类似内存服务的存储库来存储所有当前的 ModelState 并通过 Controller 操作键检索它们,例如(简单的愚蠢示例):
interface IHttpRequestModelStates
{
ICollection<string, ModelState> ModelStates {get; set;}
// you can retrieve Controller:Home / Index model state
// using ModelStates["HomeIndex"]
}
关于asp.net-mvc-3 - Autofac - 将 ModelState 注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393827/