【发布时间】:2009-09-27 04:50:15
【问题描述】:
除了可测试性之外,利用 D.I. 的最大优势是什么? (而且我不是在谈论静态类的 D.I. 框架或 IoC)?特别是对于您知道服务不会被换出的应用程序。
在我们的一个 c# 应用程序中,我们的团队在 Web Web GUI、服务层和存储库层中使用依赖注入,而不是使用静态方法。过去,我们有由静态类创建、修改、传递和保存的 POCO(业务实体对象)。
例如,过去我们可能写过:
CreditEntity creditObj = CreditEntityManager.GetCredit(customerId);
Decimal creditScore = CreditEntityManager.CalculateScore(creditObj);
return creditScore;
现在,使用 D.I.,相同的代码将是:
//not shown, _creditService instantiation/injection in c-tors
CreditEntity creditObj = _creditService.GetCredit(customerId);
Decimal creditScore = _creditService.CalculateScore(creditObj);
return creditScore;
没有太大不同,但现在我们有几十个范围更广的服务类,这意味着我们应该将它们视为静态的(即没有私有成员变量,除非它们用于定义更多依赖项)。另外,如果这些方法中的任何一个使用资源(数据库/Web 服务/等),我们会发现管理并发问题会更加困难,除非我们移除依赖关系并使用旧的静态或 using(...) 方法。
【问题讨论】:
-
“除了可测试性,使用 D.I. 的最大优势是什么”就像对我说“除了头顶上的屋顶,还有什么大的优势”。
标签: c# architecture static dependency-injection