如何解决如何实现对ViewModel类的依赖注入?
| 我有一个视图模型类,该类具有一种使用DateTime.Now根据视图模型上的日期与当前时间之间的时间段进行计算的方法。 我希望能够对该方法进行单元测试,因此我正在使用可以在测试中存根的时间服务。但是,需要以某种方式将依赖项注入到viewmodel类中。例如,当将视图模型发布回控制器时,例如将一个条目添加到视图模型列表中,则将其传递到控制器方法的参数中。我想在那时自动将日期服务传递到viewmodel中。 有人知道如何实现吗?我正在使用Mvc3和StructureMap。解决方法
我不会在视图模型上进行此类计算。在视图模型上,我会坚持使用POCO属性。将域模型映射到视图模型时,我将执行此计算。这可以在控制器操作中或在您可以访问服务层的映射层中完成。
, 可以在视图模型中编写自定义DOB验证器,而不是在viewmodel中编写方法来验证DOB:
public static ValidationResult DOBValidator(DateTime DOB)
{
if (DOB!= null && DOB.Date != DateTime.MinValue.Date)
{
int age = DateTime.Now.Year - DOB.Year;
if (age < 18)
{
return new ValidationResult(\"Sorry,age should be more than 18 years\");
}
}
return ValidationResult.Success;
}
}
然后,您可以在viewmodel中用以下方式装饰DOB属性:
[CustomValidation(typeof(ViewModelClassName),\"DOBValidator\")]
在单元测试中,您可以只调用viewmodel方法并传递一个虚拟的datetime值:
DateTime testDOB = DateTime.Now.AddYears(-18);
ValidationResult result = ViewModelObject.DOBValidator(testDOB);
Assert.AreEqual(ValidationResult.Success,result,\"The ValidationResult was incorrect\");
希望这可以帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。