版本v2.4.5.724中的autofac注册问题

cha*_*dmk 13 autofac

我有以下注册

builder.Register<Func<Type, IRequestHandler>>(
          c => request => (IRequestHandler)c.Resolve(request));
Run Code Online (Sandbox Code Playgroud)

基本上我正在尝试注册一个工厂方法,该方法解析给定类型的IRequestHandler实例.

这工作正常,直到版本2.4.3.700.但现在我收到以下错误..

无法访问已处置的对象.对象名称:'此解析操作已结束.使用lambdas注册组件时,无法存储lambda的IComponentContext'c'参数.相反,要么从'c'再次解析IComponentContext,要么解析基于Func <>的工厂以从.'创建后续组件.

UPDATE

我试图限制autofac对解决方案中其他项目的曝光.尼克,谢谢你的提示,现在我的注册看起来像这样......

 builder.Register<Func<Type,IRequestHandler>>(c =>  
         { 
           var handlers = c.Resolve<IIndex<Type,RequestHandler>>(); 
           return  request => handlers[request];  
         });
Run Code Online (Sandbox Code Playgroud)

Nic*_*rdt 20

c此表达式中是暂时的,因此该代码,而先前的功能,是断开的.Autofac 2.4.5检测到此问题,而早期版本默默忽略它.

要解决此问题,请明确解决IComponentContext:

builder.Register<Func<Type, IRequestHandler>>(c => {
    var ctx = c.Resolve<IComponentContext>();
    return request => (IRequestHandler)ctx.Resolve(request));
});
Run Code Online (Sandbox Code Playgroud)

您在此处模拟的功能可能使用键和索引更好地表示,例如,请参阅中断的IoC链http://code.google.com/p/autofac/wiki/TypedNamedAndKeyedServices.