我正在尝试使用Validar在我的课程中注入验证。我的解决方案包括多个(现在5个,将来会变得更多)项目,我想在其中注入验证。所以我在其中一个中定义了ValidationTemplate
类,并将ValidationTemplateAttribute
放在每个程序集中,如下所示:
using Validar;
[assembly: ValidationTemplate(typeof(IMS.General.Validation.ValidationTemplate))]
当我建立时,我收到一个我不理解的错误,但阻止我走得更远:
C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.WinFx.targets(268,9): 错误MC1000:未知的生成错误,'无法加载类型 程序集'mscorlib''Validar.ValidationTemplateAttribute', Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。'
我正在使用Visual Studio 2013专业版更新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通常效果很好,在保持课堂干净整洁的同时为我节省了大量的工作!
答案 0 :(得分:3)
在与Validar的程序员直接联系后,他发现不同版本的.Net框架以不同的方式对待importing into modules。他解决了已发布的版本1.4.6 的问题。这解决了这个问题。
所以我的建议:使用Fody和Validar。它运行良好,具有良好的支持并保持代码清洁,同时在WPF应用程序(或使用INotifyDataErrorInfo
的任何其他框架)中进行漂亮的验证。