gpt4 book ai didi

dependency-injection - 可以禁用 Windsor 的 TypedFactoryFacility 的隐式委托(delegate)工厂注册吗?

转载 作者:行者123 更新时间:2023-12-04 08:22:27 25 4
gpt4 key购买 nike

我们使用的是 Windsor 的 typed factory facility并认为它很可爱。我们使用 interface-based factories .但是我们想禁用 delegate-based factories 的一些子集。 ,特别是隐式注册的工厂。这些是违反直觉的,不是因为它们是代表,而是因为它们是神奇地创建的,并且可以延迟失败。

如果我们有一个将委托(delegate)作为依赖的类

class X { public X(Func<int,IPrincipal> d); }

然后将其注册到已注册类型工厂设施的容器中。
container.Kernel.Register(Component.For<X>().ImplementedBy<X>())

我可以毫不费力地解决它,这起初是违反直觉的,因为没有人告诉容器我们对 Func<int,IPrincipal> 有什么要说的。 .
var x = container.Resolve<X>();

在我尝试实际使用隐式创建的工厂之前,我不会遇到失败。
x.D(0); // no registration for IPrincipal

虽然从某种角度来看这是有道理的,但这个工厂是隐式创建的这一事实很麻烦。这是一种非常容器感知的行为。编写任意类的人会发现通过委托(delegate)参数化他们的行为很有用,一旦我们将它们放入 IoC 容器中,我们就会遇到这种令人惊讶的行为。

也就是说,有一个聪明的隐式工厂似乎值得保留。现在,Windsor 将为 Func<T> 形式的依赖项创建一个简单的工厂。 ,允许依赖的消费者延迟实际创建。在 4.0 框架中将其更改为识别 Lazy<T> 可能是有意义的。清楚地表明您只是在推迟 T 的构建,而不是尝试访问将实现有趣策略的工厂。

是否有一个聪明的开关可用于配置 TypedFactoryFacility还是我们需要实现一些新对象来获得我们想要的行为?

最佳答案

如果你真的想你可以删除 DelegateFactory容器中的组件,它创建了基于委托(delegate)的工厂。

关于dependency-injection - 可以禁用 Windsor 的 TypedFactoryFacility 的隐式委托(delegate)工厂注册吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com