ValidationLocalizationOptions.LocalizerProvider 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定代理,控制該 IStringLocalizer 代表對特定宣告型別所使用的代表。 宣告型別是包含被驗證屬性的型別,或 null 當驗證管線沒有可歸屬訊息的宣告型別(例如頂層 Minimal API 參數)時。
public:
property Func<Type ^, Microsoft::Extensions::Localization::IStringLocalizerFactory ^, Microsoft::Extensions::Localization::IStringLocalizer ^> ^ LocalizerProvider { Func<Type ^, Microsoft::Extensions::Localization::IStringLocalizerFactory ^, Microsoft::Extensions::Localization::IStringLocalizer ^> ^ get(); void set(Func<Type ^, Microsoft::Extensions::Localization::IStringLocalizerFactory ^, Microsoft::Extensions::Localization::IStringLocalizer ^> ^ value); };
public Func<Type?,Microsoft.Extensions.Localization.IStringLocalizerFactory,Microsoft.Extensions.Localization.IStringLocalizer>? LocalizerProvider { get; set; }
member this.LocalizerProvider : Func<Type, Microsoft.Extensions.Localization.IStringLocalizerFactory, Microsoft.Extensions.Localization.IStringLocalizer> with get, set
Public Property LocalizerProvider As Func(Of Type, IStringLocalizerFactory, IStringLocalizer)
屬性值
備註
當 null (預設值) Create(Type) 被呼叫時,會以宣告型別呼叫,這遵循標準的資源檔案命名慣例(例如, Resources/Models.Customer.fr.resx 對於型別 Models.Customer)。 對於宣告無型別調用,無提供者的備援使用 typeof(object)。 在這種情況下,解析的資源來源很少有用,因此建議配置此代理(或使用 AddValidationLocalization<TResource>())以進行最小 API 參數驗證。
options.LocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedValidationMessages));
針對上述共享資源模式,偏好專用AddValidationLocalization<TResource>()超載,它會LocalizerProvider自動配置(並以單一實例優化,每次驗證呼叫都跳過重新解析)。IStringLocalizer
代理必須回傳非空 IStringLocalizer。 回傳null會導致下一次驗證嘗試本地化該宣告訊息時拋出 。InvalidOperationException
快取:驗證管線不會快取此代理回傳的 。IStringLocalizer 每次呼叫 Microsoft.Extensions.Validation.IValidationLocalizer.ResolveDisplayName(Microsoft.Extensions.Validation.DisplayNameLocalizationContext@) 和 Microsoft.Extensions.Validation.IValidationLocalizer.ResolveErrorMessage(Microsoft.Extensions.Validation.ErrorMessageLocalizationContext@),代理會被呼叫一次,因此如果實例建立成本高昂,底層 IStringLocalizerFactory 負責快取本地化器實例。 然而,預設的工廠註冊者AddLocalization()ResourceManagerStringLocalizerFactory()會將結果快取到內部。 如果你的代表自己做了比打電話還有意義的工作,請將結果記錄在關閉文件中,將成本攤銷到多次通話中。