发布
社区首页 >问答首页 >如何在ViewModel类上实现依赖注入?

如何在ViewModel类上实现依赖注入?
EN

Stack Overflow用户
提问于 2011-06-13 17:00:37
回答 2查看 603关注 0票数 2

我有一个视图模型类,它有一个方法,它使用DateTime.Now根据视图模型上的日期与当前时间之间的时间段进行计算。

我希望能够对该方法进行单元测试,因此我使用了一个可以在测试中存根的时间服务。但是,依赖关系需要以某种方式注入到viewmodel类中。当视图模型被回发到控制器时,比如向视图模型列表添加一个条目,它将被传递到控制器方法的参数中。我希望在这一点上日期服务自动传递到视图模型中。

有谁知道如何实现这一点吗?我在StructureMap中使用Mvc3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-13 17:15:41

我不会在视图模型上做这样的计算。在视图模型上,我会坚持使用POCO属性。我将在将域模型映射到视图模型时执行此计算。这可以在控制器操作中完成,也可以在您有权访问服务层的映射层中完成。

票数 3
EN

Stack Overflow用户

发布于 2011-06-13 18:05:04

你可以编写一个自定义的道布验证器,而不是在视图模型中编写一个方法来验证道布:

代码语言:javascript
代码运行次数:0
复制
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;
    }
}

然后,您可以在视图模型中使用类似以下内容来装饰您的道布属性:

代码语言:javascript
代码运行次数:0
复制
[CustomValidation(typeof(ViewModelClassName), "DOBValidator")]

在您的单元测试中,您可以只调用viewmodel方法并传递一个虚拟的datetime值:

代码语言:javascript
代码运行次数:0
复制
DateTime testDOB = DateTime.Now.AddYears(-18);
        ValidationResult result = ViewModelObject.DOBValidator(testDOB);
        Assert.AreEqual(ValidationResult.Success, result, "The ValidationResult was incorrect");

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6328427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档