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 に答える