【发布时间】:2012-11-13 20:03:06
【问题描述】:
抽象出 Autofac 的工厂方法支持的正确方法是什么?
我不断收到此异常:
此解析操作已结束。使用 lambda 注册组件时, 无法存储 lambda 的 IComponentContext 'c' 参数。相反,要么 再次从“c”解析 IComponentContext,或解析基于 Func 的工厂以创建 后续组件来自。
这是我的尝试。
public void Register<T>(Func<IFactoryContext, T> factoryMethod)
{
_containerBuilder.Register<Func<Type, T>>(c => {
var ctx = c.Resolve<IComponentContext>();
return request => factoryMethod(new AutofacFactoryContext(ctx));
});
}
我试过了
public void Register<T>(Func<IFactoryContext, T> factoryMethod)
{
_containerBuilder.Register<Func<Type, T>>(c => {
var ctx = c.Resolve<IComponentContext>();
return request => factoryMethod(new AutofacFactoryContext((IComponentContext)ctx.Resolve(request)));
});
}
我想要一个返回T的方法。
AutofacFactoryContext 是 IFactoryContext 的实现,它只是 Autofac 的 IComponentContext 的包装。
这就是我所期待的结果:
bootstrapper.Register<IFoo>(c => new Foobar());
在使用容器时:
var foobar = container.Resolve<IFoo>();
【问题讨论】:
标签: c# inversion-of-control autofac