Funq中使用的容器实例

时间:2012-07-13 14:11:13

标签: c# .net lambda funq

我正在播放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的实例传递给注册方法。

1 个答案:

答案 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;
});