2017-08-03 95 views
0

我想定製asp.net mvc核心的驗證。我的主要目標是綁定操作方法中的接口。 我通過閱讀這篇優秀的文章發現了一個解決方案:Model binding interfaces: fixing server side validation。在startuo類如何使用ASP.NET MVC核心的DI註冊自定義IObjectModelValidator

實現接口IObjectModelValidator後,並配置服務,我想知道爲什麼驗證過程不會叫我的新objectModelValidator。

當我通過執行此指令檢查我的操作時:requestServices.GetRequiredService<IObjectModelValidator>()我只找到了defaultObjectModelValidator。

我錯過了什麼嗎?

回答

0

我通過調試Asp.net MVC核心的來源發現錯誤,我在ConfigureServices方法中使用tryAddSingleton方法代替AddSingleton。 第一種方法在添加服務之前檢查是否已經有相同類型的服務,並且它沒有添加我的第二個服務。 通過由AddSingleton更改TryAddSingleton它的作品!

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