如何实现对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\");
希望这可以帮助。     

要回复问题请先登录注册