1

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

No parameterless constructor defined for this object. 

我的属性类型很少SelectList,我已经用属性排除了Bind

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

4

1 回答 1

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

全球.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);
    }
}
于 2012-11-26T04:19:09.760 回答