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容器將需要您僅更改此約束區域。我不確定這是否值得。 –