微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不确定我是否创建了正确的生命周期范围

如何解决不确定我是否创建了正确的生命周期范围

我的 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 构造函数之前,您必须注册 ILifetimeScopeClient 解析的所有依赖项。

例如,如果 Client 正在解析 IService 依赖项,您可以创建此依赖项的模拟并将其注册到容器中:

var serviceMock = new Mock<IService>();
containerBuilder.RegisterInstance(serviceMock.Object);

var container = containerBuilder.Build();
var lifetimeScope = container.BeginLifetimeScope();

然后您可以将 lifetimeScope 实例传递给 Client 构造函数。

此示例假设您使用 moq 来模拟您的服务。通常不需要将 KEY 传递给 BeginLifetimeScope 方法。

但是,根据 ILifetimeScopeClient 中的使用方式,构建容器可能会更加复杂。通常不鼓励直接注入 ILifetimeScope,而是应该注入所需的服务。有很多方法可以注入更复杂的服务,因此通常不需要注入 ILifetimeScope(参见 Named and Keyed ServicesDelegate FactoriesOwned Instances)。

AutoMock 也可能值得一看,它简化了创建具有大量依赖项的对象的过程,因为您不必单独模拟每个依赖项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。