ViewModel で現在のモデル メタデータ プロバイダーを変更することは、スレッド セーフは言うまでもなく、サイトで複数のユーザーを獲得し始めると安全ではないと確信しています。属性メソッドを使用できる場合もありますが、独自の ModelMetadataProvider を実装し、アプリの開始時にそれを Current に設定する必要があります。その後、特定の属性を調べて、返される ModelMetaData を決定します。基本実装まで。正直なところ、あなたが話している制限の量は、選択したビュー モデルのみを処理するが、それらのビュー モデルを認識またはテストすることは許可されていませんか? どこかで何か悪いことをしているような気がします...
更新: ModelMetadata プロバイダーが必要になったとき、次のようなものを作成しました...
public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
if ((containerType != typeof(MyType))
return base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
//setup custom ModelMetadata here
}
}