我正在播放Funq的截屏视频,但我对测试代码中的以下lambda不了解:
var container = new Container();
container.Register<IBar>(c => new Bar());
宣言:
public void Register<TService>(Func<Container, TService> factory) { ... }
在lambda中,新Bar()充当 TService , c 充当容器对于Register方法中使用的Func。
在执行期间,这是什么时候开始?是否是在开头创建的容器,因为我不明白何时将Container的实例传递给注册方法。
答案 0 :(得分:3)
在执行期间,这个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;
});