如何解决不确定我是否创建了正确的生命周期范围
我的 Specflow 步骤之一是尝试使用以 Autofac 的 ILifetimeScope
作为参数的方法。这是该步骤试图调用的方法:
public Client(string clientAddress,ILogger<Client> logger,IFieldDict fieldDict,IdGenerator idGenerator,ILifetimeScope scope);
我没有在我的 Specflow 应用程序中使用 Autofac,所以不确定我是否正确创建了 ILifetimeScope
。
我将此添加到我的构造函数中,但不确定这样做是否正确,但我的客户端实例似乎没有正确创建。
var containerBuilder = new ContainerBuilder();
container = (Container)containerBuilder.Build();
var lifetimeScope = container.BeginLifetimeScope("KEY");
_iLifetimeScope = lifetimeScope;
解决方法
在创建范围并将其传递给 Client
构造函数之前,您必须注册 ILifetimeScope
从 Client
解析的所有依赖项。
例如,如果 Client
正在解析 IService
依赖项,您可以创建此依赖项的模拟并将其注册到容器中:
var serviceMock = new Mock<IService>();
containerBuilder.RegisterInstance(serviceMock.Object);
var container = containerBuilder.Build();
var lifetimeScope = container.BeginLifetimeScope();
然后您可以将 lifetimeScope
实例传递给 Client
构造函数。
此示例假设您使用 moq 来模拟您的服务。通常不需要将 KEY
传递给 BeginLifetimeScope
方法。
但是,根据 ILifetimeScope
在 Client
中的使用方式,构建容器可能会更加复杂。通常不鼓励直接注入 ILifetimeScope
,而是应该注入所需的服务。有很多方法可以注入更复杂的服务,因此通常不需要注入 ILifetimeScope
(参见 Named and Keyed Services、Delegate Factories 和 Owned Instances)。
AutoMock 也可能值得一看,它简化了创建具有大量依赖项的对象的过程,因为您不必单独模拟每个依赖项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。