我有以下注册
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.
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |