Bra*_*ull 2 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);
}
Run Code Online (Sandbox Code Playgroud)
如果我理解了这个问题,你会担心静态调用,Convert你会问这个类是否也应该被注入.
如果是这样的话,你也没有.对于像Math.方法等类似的静态调用也是如此.
对于这样的.NET帮助程序调用,我遵循的规则是,如果调用是确定性的,即始终为同一输入返回相同的输出,则继续调用它(无论如何,您依赖于.NET框架,对吧?).但是如果调用是非确定性的,比如Datetime.Now或Random类的使用,那么我注入这些依赖项(当然,这会使代码更易于测试)