2017-08-03 18 views
0

asp.net mvc coreの検証をカスタム化したかったのですが、私の主な目的は、アクションメソッドでインターフェイスをバインドすることでした。 私はこの優秀な投稿を読んで解決策を見つけました:Model binding interfaces: fixing server side validationASP.NET MVCコアのDIを使用してカスタムIObjectModelValidatorを登録する方法

インターフェイスIObjectModelValidatorを実装し、startuoクラスでサービスをコンフィグレーションした後、なぜ検証プロセスが新しいobjectModelValidatorを呼び出さないのだろうと思いました。

私はこの命令を実行して自分の行動をチェックします:requestServices.GetRequiredService<IObjectModelValidator>()私はdefaultObjectModelValidatorしか見つかりませんでした。

私は何かを見逃しましたか?

答えて

0

Asp.net MVCコアのソースをデバッグしてエラーが見つかりました。ConfigureServicesメソッドでAddSingletonの代わりにtryAddSingletonメソッドを使用していました。 最初のメソッドは、サービスを追加する前に同じタイプのサービスが既に存在するかどうかをチェックし、それによって2番目のサービスを追加していないことを確認します。 AddSingletonでTryAddSingletonを変更することで動作します!

services.AddSingleton<IObjectModelValidator>(s => 
      { 
       var options = s.GetRequiredService<IOptions<MvcOptions>>().Value; 
       var modelMetadataProvider = s.GetRequiredService<IModelMetadataProvider>(); 
       return new EnhancedObjectModelValidator(modelMetadataProvider, options.ModelValidatorProviders); 
      }); 
関連する問題