删除Convert.ToDecimal依赖(依赖注入)

时间:2014-04-09 20:12:18

标签: c# dependency-injection solid-principles

我目前正在学习依赖注入,以便使用MVC创建更易维护的代码。我已经向我的控制器注入模型和计算器服务,而不是具有新的依赖性。

我的构造函数中有一些Convert.ToDecimal调用,并且不知道我是否需要担心使用依赖注入来移除静态方法调用,这是一种DI设计气味。删除太远了吗?

private readonly ICalculationService _calculation;
private readonly ICalculatorModelService _calculatormodel;

public CalculatorController(ICalculationService calculation,
    ICalculatorModelService calculatormodel) {
    _calculation = calculation;
    _calculatormodel = calculatormodel;
}

public ActionResult Index() {
    var model = _calculatormodel;
    return View(model);
}

public PartialViewResult Calculate(string submit, string txtValue, 
    string value1) {
    var model = _calculatormodel;
    if (submit == "+")
    {
        if (Session["value1"] == null)
            Session.Add("value1",Convert.ToDecimal(txtValue));
        else
            Session["value1"] = value1;
    }
    else if (submit == "=")
    {
        if (Session["value1"] == null)
        Session.Add("value1", 0);

        model.Result = _calculation.Calculate(Convert
            .ToDecimal(Session["value1"]), Convert.ToDecimal(txtValue));
    }

    return PartialView("_Calculator", model);
}

1 个答案:

答案 0 :(得分:5)

如果我理解了这个问题,你会担心Convert的静态调用,你会问这个类是否也应该被注入。

如果是这样的话,你也没有。类似的静态调用也是如此,例如Math.方法等。

对于这样的.NET帮助程序调用,遵循的规则是,如果调用是确定性的,即始终为同一输入返回相同的输出,则继续调用它(无论如何,您依赖于.NET框架,对吧?)。但是如果调用是非确定性的,比如Datetime.Now或使用Random类,那么我会注入这些依赖项(这使得代码更容易被测试)