【发布时间】:2010-10-23 15:15:43
【问题描述】:
我正在尝试学习依赖注入,但在对应用程序进行单元测试时遇到了问题。
我正在编写一个控制台应用程序,容器是在 Main() 中创建和初始化的,它在 Program.Container 中以 get-property 的形式提供,所以我可以在我的应用程序的任何地方调用 Program.Container.Resolve<..>()。
我有一个这样的 ServiceValidator 类:
public class ServiceValidator
{
private readonly IConfiguration _configuration;
private readonly IService _service;
public ServiceValidator(IConfiguration configuration, IService service)
{
_configuration = configuration;
_service = service;
}
在我使用的另一个类中
ServiceValidator serviceValidator = Program.Container.Resolve<ServiceValidator>();
serviceValidator.VerifyVersion();
是对Program.Container.Resolve 的调用导致我在单元测试中出现问题,因为它尚未设置。
在容器上调用 resolve 是一种不好的做法吗?我可以在 Main() 中创建 ServiceValidator 实例并传递对象,但这似乎很愚蠢,因为它会导致对象的大量参数被传递给下一个方法。
所以我想在一个类中调用 Resolve 是可以接受的,但是必须为单元测试配置容器。我应该怎么做,我应该将容器移动到程序类之外的另一个地方吗?你会推荐什么?
如果重要的话,我正在使用 Unity 和 C#
谢谢:-)
【问题讨论】:
标签: c# .net unit-testing dependency-injection ioc-container