我有一个视图模型类,它使用UnitOfWork
进行某些数据库操作,例如获取项目来创建选择列表,IPrincipal
进行一些审计(如修改等)。没有这个UOW就行不通。我已将我的网站配置为使用Ninject
将UOW注入Controller
。从控制器我创建视图模型时传递此UOW。但是当我执行POST
操作时,我正在
No parameterless constructor defined for this object.
我使用SelectList
属性排除的Bind
类型的属性很少。
我该如何克服这个问题?我可以配置Ninject
来创建此类型的对象并让ModelBinder
使用它吗?
答案 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);
}
}