System.ObjectDisposedException:此解析操作已结束

时间:2018-08-29 19:28:55

标签: c# autofac

我在Autofac中具有以下配置:

builder.Register<ServiceFactory>(x => y => x.Resolve<IComponentContext>().Resolve(y));  

使用此配置,我得到错误:

  

System.ObjectDisposedException:此解析操作已经   结束了。       使用lambda注册组件时,无法存储IComponentContext'c'参数到lambda。       而是从'c'再次解析IComponentContext,或从基于Func <>的工厂解析以从中创建后续组件。

如果我使用以下方法不起作用:

builder.Register<ServiceFactory>(x => {
  IComponentContext context = x.Resolve<IComponentContext>();
  return y => context.Resolve(y);
});    

不能在一个代码行中进行此配置吗?

我想念什么?

1 个答案:

答案 0 :(得分:-1)

您的第一个配置看起来与第二个配置非常相似,但是在解析IComponentContext时有所不同。

让我在不更改逻辑的情况下重新构建您的第一个配置。

builder.Register<ServiceFactory>(x => 
{ 
    return y => x.Resolve<IComponentContext>().Resolve(y)
});  

在第一个示例中,您正在注册lambda

  1. 返回其中的lambda:

    1.1解决IComponentContext

    1.2在IComponentContext实例上调用解析并返回结果

让我们将其与第二种配置进行比较。

builder.Register<ServiceFactory>(x => {
  IComponentContext context = x.Resolve<IComponentContext>();
  return y => context.Resolve(y);
});    

在第二个示例中,您正在注册lambda,

  1. 解析IComponentContext并将其分配给变量'context'

  2. 返回捕获变量上下文的lambda,并且:

    2.1在变量上下文上调用解析并返回结果

因此,在解决IComponentContext的瞬间有所不同。