如何强制DI风格

时间:2015-01-20 09:45:18

标签: c# asp.net-mvc oop design-patterns dependency-injection

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

是否有任何方法( Visual Studio中的代码规则配置)或工具停止(通过提供警告或错误)开发人员使用“new”关键字来创建服务类的实例。 谢谢。

4 个答案:

答案 0 :(得分:3)

您不能强迫开发人员使用工具。他们总能找到解决你的愚蠢行为的方法。工具。相反,你应该以身作则,教导他们,训练他们。做代码审查并解释为什么你的建议是要走的路。

答案 1 :(得分:2)

使用Resharper代码检查。添加自定义模式以查找要警告开发人员的内容。然后,所有开发人员都可以共享这些设置。

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

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

答案 2 :(得分:1)

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

请注意"无知"这里并不意味着愚蠢或糟糕的开发人员。它只是意味着那些不知道有更好的方法做某事的人。一旦你以更好的方式教导他们,并且他们学到了对他们的期望,就会侵蚀他们的无知。

你可以做的事情:

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

  2. 将您的接口置于一个名称空间下,将服务实现置于不同的名称空间下。在查看,扫描服务命名空间的文件时,如果它在任何不应该使用的地方使用,请拒绝拉取请求。

  3. 每当您发现违反要强制执行的规则的情况进入您的存储库时,请运行BLAME以找出哪些开发人员引入了错误的代码。与那个人谈谈。找出他们为什么这样做,而不是你喜欢的方式。告诉他们为什么最好按照自己的方式去做。

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

  5. 我喜欢@David Osborne's R# idea,但开发人员可以随时暂停R#,或完全关闭它。最终这是一个过程问题。 I agree with @Steven你应该以身作则,教导和训练。通过分享您的知识来建立您的团队,不要因为做错事情而惩罚他们。

答案 3 :(得分:0)

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