0

以下のようなモデルバインダーがあります

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

ここまでは順調です。今私の問題は、コンストラクターへの依存関係がさらに必要になることです。たとえば、次のようになります。

public PartyRoleModelBinder(IPartyRoleFactory prFactory, IPartyRoleTypeRepository prtRepo, IPartyRepository pRepo)
    {
        PrFactory = prFactory;
        PRepo = pRepo;
        PrtRepo = prtRepo;
    }

しかし、これをglobal.asax.csに登録する方法は確かです

以下のように使用すると

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

それはスローします: エラー 25 'PartyWeb.ModelBinders.PartyRoleModelBinder' には 1 つの引数を取るコンストラクターが含まれていません C:\d2\Apps\d2admin\Global.asax.cs 35 57 d2admin

または

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

コンパイル エラー: エラー 25 非ジェネリック メソッド 'System.Web.Mvc.IDependencyResolver.GetService(System.Type)' は型引数 C:\d2\Apps\d2admin\Global.asax.cs で使用できません 35 109 d2admin

誰かがそれを解決する方法を教えてもらえますか?

4

2 に答える 2

3

(変更された) コンストラクターで3 つのパラメーターPartyRoleModelBinderを予期する新しいインスタンスを作成しようとしていますが、1 つのパラメーターのみを渡し、途中で間違って使用しています。DependencyResolver.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);
于 2013-07-03T11:52:42.490 に答える
0

haim770に同意します。それを行う別の方法は次のとおりです。

    ModelBinders.Binders.Add(typeof(PartyRole), new PartyRoleModelBinder(DependencyResolver.Current.GetService<IPartyRoleFactory>(),
                    DependencyResolver.Current.GetService<IPartyRoleTypeRepository>(), DependencyResolver.Current.GetService<IPartyRepository>()));
于 2013-07-04T03:58:23.913 に答える