c# - System.ObjectDisposedException:此解析操作已结束
问题描述
我在 Autofac 中有以下配置:
builder.Register<ServiceFactory>(x => y => x.Resolve<IComponentContext>().Resolve(y));
使用此配置,我收到错误:
System.ObjectDisposedException:此解析操作已结束。使用 lambda 注册组件时,无法存储 lambda 的 IComponentContext 'c' 参数。相反,要么从“c”再次解析 IComponentContext,要么解析基于 Func<> 的工厂以从中创建后续组件。
如果我使用以下内容,则可以使用:
builder.Register<ServiceFactory>(x => {
IComponentContext context = x.Resolve<IComponentContext>();
return y => context.Resolve(y);
});
不能在一个代码行中进行此配置吗?
我错过了什么?
解决方案
您的第一个配置看起来与第二个配置非常相似,但IComponentContext
解决时间不同。
让我在不改变逻辑的情况下稍微重构你的第一个配置。
builder.Register<ServiceFactory>(x =>
{
return y => x.Resolve<IComponentContext>().Resolve(y)
});
在第一个示例中,您正在注册 lambda
返回 lambda,其中:
1.1 解析IComponentContext
1.2 在 IComponentContext 实例上调用 Resolve 并返回结果
让我们将其与第二种配置进行比较。
builder.Register<ServiceFactory>(x => {
IComponentContext context = x.Resolve<IComponentContext>();
return y => context.Resolve(y);
});
在第二个示例中,您正在注册 lambda
解析 IComponentContext 并将其分配给变量 'context'
返回捕获变量上下文的 lambda 和:
2.1 对变量上下文调用Resolve并返回结果
所以它在解析 IComponentContext 的时刻有所不同。
推荐阅读
- amazon-dynamodb - 修改 DynamoDB 表的所有项目
- python - 如何在熊猫的一列中获取一个值的百分比
- javascript - ngForm 变量在组件中未定义
- python - 如何使用 python 编辑保存在 Elasticsearch 中的文档
- scala - 组合 2 KeyValueGroupedDatasets
- cypress - 使用测试运行程序在本地运行时在仪表板中记录测试结果
- python - 解开一个 numpy mgrid
- python - 无法在树莓派 yocto 构建中导入 python tty 模块
- jquery - 如何在这里修复画廊?
- flutter - 覆盖页面浏览控制器的 CustomPainter 画布