如何强制 DI 风格

How to Force DI style

我们正在构建一个 ASP.NET MVC 5 网络应用程序。 我们可以使用 IoC 容器来解决服务依赖性,但仍然 new/ignorant 开发人员可以在需要时创建服务实例 类 而不是使用 DI 框架解决它。

有没有办法(配置代码规则 in Visual Studio)或工具停止(通过发出警告或错误)开发人员使用“new”关键字创建服务实例 类。 谢谢。

您不能将此强加给使用工具的开发人员。他们总能找到解决您的 'stupid' 工具的方法。相反,你应该以身作则,教导他们,训练他们。进行代码审查并解释为什么你的建议是可行的方法。

使用 Resharper 代码检查。添加自定义模式以查找您想要警告开发人员的事情。这些设置随后可以由所有开发人员共享。

示例:https://www.jetbrains.com/resharper/webhelp80/Reference__Add_Edit_Highlighting_Pattern.html

我想您需要定义要注入的类型,然后将它们添加到您的模式中。

如果您有天真/无知的开发人员,那么糟糕的代码将会溜进您的项目。您应该更改您的流程,以便在错误代码进入您的存储库之前需要进行代码审查。

请注意,这里的 "ignorant" 并不意味着愚蠢或糟糕的开发人员。这只是意味着不知道有更好的方法来做某事的人。一旦你教给他们更好的方法,并且他们知道了他们应该做的事情,就会消除他们的无知。

您可以做的事情:

  1. 让所有初级开发人员必须提交拉取请求才能提交他们的更改。然后,高级/首席开发人员必须审查更改并接受更改或拒绝更改请求。

  2. 将您的接口放在一个命名空间下,将服务实现放在另一个命名空间下。在审查时,扫描服务命名空间的文件,如果在不应该使用的地方使用它,则拒绝拉取请求。

  3. 每当您发现违反您要执行的规则的行为已溜进您的存储库时,运行 责怪哪个开发人员引入了错误代码。和那个人谈谈。找出他们为什么那样做,而不是你喜欢的方式。向他们展示为什么最好按照您的方式去做。

  4. 对您的代码进行单元测试。有时,当服务实现被硬编码到被测方法而不是模拟服务的接口时,可能更难通过测试。

我喜欢 , but developers can always suspend R#, or turn it off altogether. Ultimately this is a process issue. 你应该以身作则、教导和培训。通过分享你的知识来建立你的团队,不要因为做错事而惩罚他们而拖累他们。

我得到了一个更好的页面来解释如何在 ReSharper 中创建自定义代码检查https://www.jetbrains.com/resharper/webhelp80/Code_Inspection__Creating_Custom_Inspections_and_QuickFixes.html