当使用城堡温莎的自动注册时,我看到人们在做类似的事情
_container.Register(
AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())
.WithService.FirstInterface());
对于我的一生,我无法弄清楚 Pick() 方法的作用,也找不到任何文档。谁能给我解释一下?
当使用城堡温莎的自动注册时,我看到人们在做类似的事情
_container.Register(
AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())
.WithService.FirstInterface());
对于我的一生,我无法弄清楚 Pick() 方法的作用,也找不到任何文档。谁能给我解释一下?
Pick(IEnumerable<Type>) 是 的同义词 From(IEnumerable<Type>),即它选择指定的类型作为注册目标。
AllTypes.Pick() 与 相同 AllTypes.Of<object>(),因此它有效地选择了所有类型。
AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())将在执行程序集中选择所有类型(当然,您可以过滤)
像往常一样,查看fluent API wiki和/或测试用例以获取更多信息。
这是这个 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,方法用于对稍后执行的行为进行排序。为了实现这一点,这些方法返回建设者指导配置步骤,而实际工作在最后完成。