【问题标题】:No Parameterless Constructor defined for - ViewModel with UOW没有为 - 带有 UOW 的 ViewModel 定义无参数构造函数
【发布时间】:2012-11-26 04:13:04
【问题描述】:

我有一个视图模型类,它使用UnitOfWork 进行一些数据库操作,例如获取项目以创建选择列表,并使用IPrincipal 进行一些审计(如修改等)。没有这个 UOW,它就无法工作。我已将我的网站配置为使用Ninject 将UOW 注入Controllers。在创建视图模型时,我从控制器传递了这个 UOW。但是在执行POST 操作时,我得到了

No parameterless constructor defined for this object. 

我几乎没有使用Bind 属性排除的SelectList 类型的属性。

我该如何克服这个问题?我可以配置Ninject 来创建这种类型的对象并让ModelBinder 使用它吗?

【问题讨论】:

    标签: asp.net-mvc-4 ninject viewmodel


    【解决方案1】:

    也许继承自 DefaultModelBinder 并通过 Ninject 解析模型类?

    更新:

    NinjectModelBinder.cs

    public class NinjectModelBinder : DefaultModelBinder
    {
        private readonly StandardKernel _kernel;
    
        public NinjectModelBinder(StandardKernel kernel)
        {
            _kernel = kernel;
        }
    
        protected override object CreateModel(ControllerContext controllerContext, 
                                  ModelBindingContext bindingContext, Type modelType)
        {
            var model = _kernel.TryGet(modelType);
            if (model != null) return model;
            return base.CreateModel(controllerContext, bindingContext, modelType);
        }
    }
    

    Global.asax.cs

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
    
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
    
            var kernel = new StandardKernel();
            ModelBinders.Binders.DefaultBinder = new NinjectModelBinder(kernel);
        }
    }
    

    【讨论】:

    • 我看到了曙光,但我需要更多详细说明。
    • @TheVillageIdiot 我已经用实际实现更新了我的答案。
    • 太好了。安装好了。我们还能以某种方式获得IPrincipal 吗?我正在从Controller.User 推送它。
    • 使用静态HttpContext.Current.User怎么样?
    • 好吧...来自全职WebForms 开发需要更深入地探索MVC。非常感谢你让我开心:)
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多