我正在尝试学习依赖注入并且在对应用程序进行单元测试时遇到了问题。
我正在编写一个控制台应用程序,容器是在 Main() 中创建和初始化的,它可以作为get-property
in 使用Program.Container
,所以我可以在我的应用程序的任何地方调用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 是一种不好的做法吗?我可以在其中创建 ServiceValidator 实例Main()
并传递对象,但这似乎很愚蠢,因为它会导致对象的大量参数被传递给下一个方法。
所以我想在一个类中调用 Resolve 是可以接受的,但是必须为单元测试配置容器。我应该怎么做,我应该将容器移动到程序类之外的另一个地方吗?你会推荐什么?
如果重要的话,我正在使用 Unity 和 C#
谢谢 :-)