没有定义无参数构造函数 - 带有UOW的ViewModel

时间:2012-11-26 04:13:05

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

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

No parameterless constructor defined for this object. 

我使用SelectList属性排除的Bind类型的属性很少。

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

1 个答案:

答案 0 :(得分:2)

也许继承自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);
    }
}