我找不到如何删除组件(应该重新添加)。
我能找到禁用 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
是一个内部字段。
现在您可以使用接口工厂,而无需委托工厂搞砸一切。