1

UnitOfWorkアイテムのフェッチなどのデータベース操作を使用して選択リストを作成したりIPrincipal、一部の監査(によって変更されたなど)を行ったりするビューモデルクラスがあります。このUOWなしでは機能しません。NinjectUOWをに注入するために使用するようにWebサイトを構成しましControllerた。コントローラーから、ビューモデルを作成するときにこの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);
    }
}

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);
    }
}
于 2012-11-26T04:19:09.760 に答える