4

我在 Castle Windsor 中使用 TypedFactoryFacility 来允许我使用接口工厂依赖注入。

当不需要时(应该为 Null),我遇到了自动委托工厂将 Func 注入自动解析的组件的问题。

根据这个问题,我想保留 TypedFactoryFacility,但删除 DelegateFactory:

可以禁用 Windsor 的 TypedFactoryFacility 的隐式委托工厂注册吗?

不幸的是,现在无法从 Castle Windsor(版本 3)中删除组件。

有人可以建议一种方法来删除 DelegateFactory 或以某种方式禁用它,这样它就不会将 Func 注入我无法解析的服务中(为什么它甚至会注入它不知道如何处理的 Func 呢??)

4

1 回答 1

2

我找不到如何删除组件(应该重新添加)。

我能找到禁用 DelegateFactory 的最佳方法是停止使用 TypedFactoryFacility 类来设置 Typed Factory,并使用其中的 Init 函数中的代码,减去委托工厂方法。

如此:

// Stop using AddFacility
//container.AddFacility<TypedFactoryFacility>();

// Initialise the TypedFactoryFacility manually, leaving out the DelegateFactory components.
container.Kernel.Register(new IRegistration[] {
   Component.For<TypedFactoryInterceptor>().NamedAutomatically(TypedFactoryFacility.InterceptorKey),
   // Disable DelegateFactory
   // Component.For<ILazyComponentLoader>().ImplementedBy<DelegateFactory>().NamedAutomatically(TypedFactoryFacility.DelegateFactoryKey),
   Component.For<ITypedFactoryComponentSelector>().ImplementedBy<DefaultTypedFactoryComponentSelector>().NamedAutomatically("Castle.TypedFactory.DefaultInterfaceFactoryComponentSelector"),
   // Disable DelegateFactory
   // Component.For<ITypedFactoryComponentSelector>().ImplementedBy<DefaultDelegateComponentSelector>().NamedAutomatically(TypedFactoryFacility.DefaultDelegateSelectorKey)
});
container.Kernel.ComponentModelBuilder.AddContributor(new TypedFactoryCachingInspector());

我不得不使用魔术字符串"Castle.TypedFactory.DefaultInterfaceFactoryComponentSelector" DefaultInterfaceSelectorKey是一个内部字段。

现在您可以使用接口工厂,而无需委托工厂搞砸一切。

于 2013-10-01T12:33:02.907 回答