我在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);
});
不能在一个代码行中进行此配置吗?
我想念什么?
答案 0 :(得分:-1)
您的第一个配置看起来与第二个配置非常相似,但是在解析IComponentContext
时有所不同。
让我在不更改逻辑的情况下重新构建您的第一个配置。
builder.Register<ServiceFactory>(x =>
{
return y => x.Resolve<IComponentContext>().Resolve(y)
});
在第一个示例中,您正在注册lambda
返回其中的lambda:
1.1解决IComponentContext
1.2在IComponentContext实例上调用解析并返回结果
让我们将其与第二种配置进行比较。
builder.Register<ServiceFactory>(x => {
IComponentContext context = x.Resolve<IComponentContext>();
return y => context.Resolve(y);
});
在第二个示例中,您正在注册lambda,
解析IComponentContext并将其分配给变量'context'
返回捕获变量上下文的lambda,并且:
2.1在变量上下文上调用解析并返回结果
因此,在解决IComponentContext的瞬间有所不同。