gpt4 book ai didi

testing - 复制(克隆)autofac 注册

转载 作者:行者123 更新时间:2023-11-28 20:23:07 25 4
gpt4 key购买 nike

在一个测试项目中,当我使用 Autofac 最新版本时,我发现了性能差距。我有 BaseTest 类,它是所有测试的基类。在 ctor 中,我创建 Autofac ContainerBuilder 对象,注册所有类型等。

然后 - 构建容器并将其用于服务定位器。

问题是 - 我无法使容器静态化并只初始化一个(不是每个测试一次),以节省扫描程序集以注册类型等的大量时间。

我的目标 - 创建静态 ContainerBuilder(或 Container) - 我将在静态 ctor BaseTest 中注册所有类型,然后在通常的 ctor 中将此实例(包含所有注册)复制到非静态属性并将其用于 ServiceLocator。

为什么我需要它 - 因为,例如 TestA 更改/添加替换或者 TestB 确实知道有关该替换的任何信息。所以我需要在每个测试集之后清理所有关于注册的定制。

你有什么想法吗?我在 autofac 中搜索了很多信息——据我所知,不可能复制或克隆容器。此外,我无法使 ContainerBuilder 静态化,并且在通常的 ctor 调用 Build() 或 Update 中,因为这是不允许的。

提前致谢。

最佳答案

Autofac 不支持克隆容器或容器注册。

与其在每次测试中更改整个容器,不如使用嵌套的生命周期范围。在您的测试夹具设置中,注册所有对所有测试通用且不会更改的内容。然后在每个测试中,创建一个新的生命周期范围并注册差异/覆盖。

private IContainer _container;

[TestFixtureSetUp]
public void TestFixtureSetUp()
{
var builder = new ContainerBuilder();
// Register the common stuff, then
this._container = builder.Build();
}

[Test]
public void SomeTest()
{
using(var scope = this._container.BeginLifetimeScope(
b => b.RegisterType<OverrideType>().As<IOverride>())
{
// Resolve things from the "scope" variable rather
// than from the root container.
}
}

关于testing - 复制(克隆)autofac 注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33366700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com