Validarを使用して、クラスに検証を挿入しようとしています。私のソリューションは、検証を挿入したい複数の (今のところ 5 つ、将来的にはさらに増える可能性があります) プロジェクトで構成されています。そこで、そのうちの 1 つで自分のValidationTemplate
クラスを定義し、次のValidationTemplateAttribute
ようにすべてのアセンブリに配置しました。
using Validar;
[assembly: ValidationTemplate(typeof(IMS.General.Validation.ValidationTemplate))]
ビルドすると、理解できないエラーが表示されますが、先に進むことができません。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets(268,9): エラー MC1000: 不明なビルド エラー、「型 'Validar.ValidationTemplateAttribute' をアセンブリ 'mscorlib、バージョン = から読み込めませんでした」 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089'。
Visual Studio 2013 Professional Update 4 を使用しており、ターゲット フレームワークは .Net Framework 4.5 です。
それが質問に役立つ場合、私の実装は次のValidationTemplate
ようになります。
namespace IMS.General.Validation
{
public class ValidationTemplate : INotifyDataErrorInfo
{
private readonly INotifyPropertyChanged target;
private readonly ValidationContext validationContext;
private readonly List<ValidationResult> validationResults;
public ValidationTemplate(INotifyPropertyChanged target)
{
this.target = target;
this.validationContext = new ValidationContext(target, null, null);
this.validationResults = new List<ValidationResult>();
Validator.TryValidateObject(this.target, this.validationContext,
this.validationResults, true);
target.PropertyChanged += Validate;
}
private void Validate(object sender, PropertyChangedEventArgs e)
{
this.validationResults.Clear();
Validator.TryValidateObject(this.target, this.validationContext,
this.validationResults, true);
var hashSet = new HashSet<string>(
this.validationResults.SelectMany(x => x.MemberNames));
foreach (var error in hashSet)
{
this.ErrorsChanged(this,
new DataErrorsChangedEventArgs(error));
}
}
public IEnumerable GetErrors(string propertyName)
{
return this.validationResults
.Where(x => x.MemberNames.Contains(propertyName))
.Select(x => x.ErrorMessage);
}
public bool HasErrors
{
get { return this.validationResults.Count > 0; }
}
public event EventHandler<DataErrorsChangedEventArgs>
ErrorsChanged = (s, e) => { };
}
}
私は何を間違っていますか?どうすればこの問題を解決できますか?
編集: さあみんな!これで私を助けてくれる人は本当にいませんか?問題を示すためにテスト ソリューションを作成する必要がありますか? お知らせ下さい!私は本当に解決策が必要です!Fody は通常、うまく機能し、クラスをきれいに保ちながら多くの作業を節約してくれます。