6

当使用城堡温莎的自动注册时,我看到人们在做类似的事情

_container.Register(
  AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())
    .WithService.FirstInterface());

对于我的一生,我无法弄清楚 Pick() 方法的作用,也找不到任何文档。谁能给我解释一下?

4

2 回答 2

9

Pick(IEnumerable<Type>) 是 的同义词 From(IEnumerable<Type>),即它选择指定的类型作为注册目标。

AllTypes.Pick() 与 相同 AllTypes.Of<object>(),因此它有效地选择了所有类型。

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())将在执行程序集中选择所有类型(当然,您可以过滤)

像往常一样,查看fluent API wiki和/或测试用例以获取更多信息。

于 2009-05-17T23:40:25.197 回答
2

这是这个 fluent API 的起点,用于选择哪些类型将自动注册到容器中。

Container.Register(
        AllTypes.Pick()
        .FromAssemblyNamed("MyAssembly")
        .If(t => t.Name.EndsWith("ABC"))
        .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
        .WithService.Select(i => typeof(I))
    );

在此示例中,所有从 MyAssembly 中选择的名称以“ABC”结尾的类型都将添加到具有 Transient Lifestyle 作为类型 I 的服务的容器中。该示例来自这个问题

这是一种内部 DSL 形式的声明性方法。使用这种 API,方法用于对稍后执行的行为进行排序。为了实现这一点,这些方法返回建设者指导配置步骤,而实际工作在最后完成。

于 2009-05-17T23:44:34.903 回答