我正在了解Funq的屏幕,但我不理解测试代码中的以下lambda:
var container = new Container();
container.Register<IBar>(c => new Bar());声明:
public void Register<TService>(Func<Container, TService> factory) { ... }在lambda中,新Bar()充当TService,c作为注册方法中使用的Func的容器。
在执行过程中,这是何时发生的?它是否是在开始时创建的容器,因为我不理解容器的实例何时传递给Registry方法。
发布于 2012-07-13 14:26:42
在执行过程中,何时声明这个c?
您使用了以下行:
var container = new Container();实际上,Funq将一个实例传递给所提供的委托。例如,这允许您执行以下操作:
container.Register<IBar>(c =>
{
var bar = c.Resolve<Bar>();
bar.SomeProperty = 5;
return bar;
});然而,将容器本身传递给委托-海事组织非常无用-因为这个值在注册期间总是可用的。例如,您也可以这样写:
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;
});https://stackoverflow.com/questions/11472179
复制相似问题