2

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 は通常、うまく機能し、クラスをきれいに保ちながら多くの作業を節約してくれます。

4

1 に答える 1