0
抽象出Autofac的工厂方法支持的正确方法是什么?抽象出Autofac的工厂方法支持
我不断收到此异常:
这解析操作已经结束。当使用lambdas注册组件时, 无法存储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>();
我只是在学习如何抽象出autofac,以便我的项目不必对它有直接的依赖关系 - 它在另一个程序集中。 –
@ DanielA.White:通常情况下,您只能在您的作文根目录中使用DI容器。这是您项目的一个非常有限的领域。切换DI容器将需要您仅更改此约束区域。我不确定这是否值得。 –