繁体   English   中英

ASP.NET MVC 3 中的依赖注入说明和 DependencyResolver?

[英]Dependency Inject exposition and DependencyResolver in ASP.NET MVC 3?

我有一个服务(AccountService),它有大约八种方法。 其中一种方法发送 email。 我有另一个服务 (EmailService),它是注入 AccountService 的构造函数。

我想知道是否有必要这样做,因为感觉就像每次我向方法添加具有依赖项的功能时,我都必须更改我的所有测试,其中我是 mocking 对构造函数的依赖项。 这感觉就像 DI 实际上让改变事情变得更难,而不是更容易。

所以我正在考虑在我的 controller 操作中使用 DependencyResolver,它调用 AccountService 来获取 EmailService 并将其传递。但是,这会影响我的测试吗?

我将如何 go 关于测试使用依赖解析器的 controller 操作? 鉴于帐户服务是由 ninject 注入 AccountController 的构造函数。

干杯。

不要在控制器中使用 DependencyResolver! 只需使用它使用 Ninject 创建 controller(参见https://github.com/ninject/ninject.web.mvc/wiki )。 其他一切都应该由 Ninject 使用构造函数注入创建。

实际上,使用适当的 DI 和遵循 SOLID 原则的设计进行单元测试非常容易。

在测试夹具设置中,您除了为每个依赖项创建(动态)模拟和使用创建的模拟作为依赖项的被测 object 的实例之外什么都不做。 这样,您必须为每个 class 的所有测试只调用一次构造函数。

如果测试很难,那不是因为 DI,而是因为没有遵循 SOLID 原则(很可能是单一责任原则),或者是因为糟糕的测试,例如使用依赖关系的真实实例而不是模拟的单元测试,或者在测试夹具中做太多事情设置。

您是否考虑过使用 Property DI 还是有必要将其注入到.ctor 中? 顺便说一句:对于您的测试,您是否使用某种 Mocking 框架(例如 Moq、RhinoMocks)?

希望它会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM