Asp.net mvc 4 如何注册接受多个参数的自定义模型绑定器+;MVC4

Asp.net mvc 4 如何注册接受多个参数的自定义模型绑定器+;MVC4,asp.net-mvc-4,Asp.net Mvc 4,我有一个活页夹模型如下 public PartyRoleModelBinder(IPartyRoleFactory prFactory) { PrFactory = prFactory; PRepo = pRepo; PrtRepo = prtRepo; } protected override object CreateModel(ControllerContext controllerContext, ModelBindingC

我有一个活页夹模型如下

public PartyRoleModelBinder(IPartyRoleFactory prFactory)
    {
        PrFactory = prFactory;
        PRepo = pRepo;
        PrtRepo = prtRepo;
    }
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
    {
       //doing some work here
    }

    private IPartyRoleFactory PrFactory { get; set; }
    private IPartyRepository PRepo { get; set; }
    private IPartyRoleTypeRepository PrtRepo { get; set; }
我在global.asax.cs中注册如下:

ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>()));
但我知道如何在global.asax.cs中注册

如果我像下面这样使用

ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>()));
ModelBinders.Binders.Add(typeof(PartyRole),newpartyrolemodelbinder(dependencysolver.Current.GetService());
它抛出:错误25“PartyWeb.ModelBinders.PartyRoleModelBinder”不包含接受1个参数的构造函数C:\d2\Apps\d2 admin\Global.asax.cs 35 57 d2 admin

ModelBinders.Binders.Add(typeof(PartyRole),newpartyrolemodelbinder(dependencysolver.Current.GetService());
编译错误:错误25非泛型方法“System.Web.Mvc.idependencysolver.GetService(System.Type)”不能与类型参数C:\d2\Apps\d2 admin\Global.asax.cs 35 109 d2 admin一起使用


有人能告诉我如何解决它吗?

您正在尝试创建一个新的
PartyRoleModelBinder
实例,该实例在其(修改后的)构造函数中需要3个参数,但您只传递了1个参数,并且在过程中错误地使用了
dependencysolver.Current.GetService

尝试:

var resolver=dependencysolver.Current;
IPartyRoleFactory角色库=resolver.GetService();
IPartyRepository repo=resolver.GetService();
IPartyRoleTypeRepo typeRepo=resolver.GetService();
var partyRoleModelBinder=新partyRoleModelBinder(角色扮演、类型回购、回购);
ModelBinders.Binders.Add(typeof(PartyRole),partyRoleModelBinder);

您正在尝试创建一个新的
PartyRoleModelBinder
实例,该实例在其(修改的)构造函数中需要3个参数,但您只传递了1个参数,并且在过程中错误地使用了
DependencyResolver.Current.GetService

尝试:

var resolver=dependencysolver.Current;
IPartyRoleFactory角色库=resolver.GetService();
IPartyRepository repo=resolver.GetService();
IPartyRoleTypeRepo typeRepo=resolver.GetService();
var partyRoleModelBinder=新partyRoleModelBinder(角色扮演、类型回购、回购);
ModelBinders.Binders.Add(typeof(PartyRole),partyRoleModelBinder);
我同意haim770。 另一种方法是:

    ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>(),
                    DependencyResolver.Current.GetService<IPartyRoleTypeRepository>(), DependencyResolver.Current.GetService<IPartyRepository>()));
ModelBinders.Binders.Add(typeof(PartyRole),新的PartyRoleModelBinder(dependencysolver.Current.GetService(),
DependencyResolver.Current.GetService(),DependencyResolver.Current.GetService());
我同意haim770。 另一种方法是:

    ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>(),
                    DependencyResolver.Current.GetService<IPartyRoleTypeRepository>(), DependencyResolver.Current.GetService<IPartyRepository>()));
ModelBinders.Binders.Add(typeof(PartyRole),新的PartyRoleModelBinder(dependencysolver.Current.GetService(),
DependencyResolver.Current.GetService(),DependencyResolver.Current.GetService());

太好了,你把它照亮了,现在也可以这样做:ModelBinders.Binders.Add(typeof(PartyRole),newpartyrolemodelbinder(DependencyResolver.Current.GetService(),DependencyResolver.Current.GetService(),DependencyResolver.Current.GetService(),DependencyResolver.Current.GetService());太好了,你说得对,现在这也可以做为:ModelBinders.Binders.Add(typeof(PartyRole),newpartyrolemodelbinder(dependencysolver.Current.GetService(),dependencysolver.Current.GetService(),dependencysolver.Current.GetService());
 var resolver = DependencyResolver.Current;
 IPartyRoleFactory roleFactory = resolver.GetService<IPartyRoleFactory>();
 IPartyRepository repo = resolver.GetService<IPartyRepository>();
 IPartyRoleTypeRepo typeRepo = resolver.GetService<IPartyRoleTypeRepository>();

 var partyRoleModelBinder = new PartyRoleModelBinder(roleFactory, typeRepo, repo);

 ModelBinders.Binders.Add(typeof(PartyRole), partyRoleModelBinder);
    ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>(),
                    DependencyResolver.Current.GetService<IPartyRoleTypeRepository>(), DependencyResolver.Current.GetService<IPartyRepository>()));