抽象出 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>();