实例容器的Funq
问题描述:
我华清Funq的截屏使用,但我不明白,用下面的拉姆达在测试代码的东西:实例容器的Funq
var container = new Container();
container.Register<IBar>(c => new Bar());
声明:
public void Register<TService>(Func<Container, TService> factory) { ... }
在lambda,新Bar()充当TService和c作为容器为Func在Register方法中使用。
在执行过程中,这个c是何时被删除的?它是在开始时创建的容器,因为我不明白Container的实例何时传递给Register方法。
答
在执行过程中,这个c是什么时候声明的?
你做,使用以下行:
var container = new Container();
Funq实际上通过一个实例来本身所提供的委托。这允许您,例如,要做到以下几点:
container.Register<IBar>(c =>
{
var bar = c.Resolve<Bar>();
bar.SomeProperty = 5;
return bar;
});
然而,通过容器本身的委托它挺有用IMO,因为在注册过程中该值始终可用。举例来说,你也可以这样写:
container.Register<IBar>(unused =>
{
var bar = container.Resolve<Bar>();
bar.SomeProperty = 5;
return bar;
});
换句话说,这本来是容易得多,如果该Register
方法接受一个Func<T>
而不是Func<Container, T>
的。以前的代码片段应该是这样的:
container.Register<IBar>(() =>
{
var bar = container.Resolve<Bar>();
bar.SomeProperty = 5;
return bar;
});