不确定我是否正在创建正确的生存范围



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

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

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(请参见命名和键控服务、委派工厂和拥有的实例(。

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

相关内容

  • 没有找到相关文章

最新更新