asp.net-mvc-3 - Autofac - 将 ModelState 注入(inject)服务

标签 asp.net-mvc-3 autofac

我希望能够将模型状态注入(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/

相关文章:

asp.net-mvc-3 - EntityType 'x' 没有定义键。定义此 EntityType 的键

html - 在 MVC View 中删除注释

c# - 如何将 Autofac 容器用作抽象工厂?

asp.net-mvc - 使用 NHibernate 和 Autofac 管理多个数据库

c# - 如何使用自定义工厂方法注册开放泛型?

javascript - 有没有办法将代码附加到 asp.mvc 部分

jquery - Ajax.BeginForm : disable button while loading

asp.net - 存储可变数据

wcf - 在使用 Autofac 注入(inject)的 WCF 服务上配置绑定(bind)

C# - IoC - WebAPI 2 上的 Autofac 依赖注入(inject)