が、私はそうのように私の自動テストで城ウィンザーを使用しようとしていますユニットテストで既存のコンポーネントの登録を無効にウィンザーコンテナは、各成分の 城ウィンザー3では、
Test
機能アクセス方法IWindsorContainer.Resolve<T>
介しコンポーネント、およびデフォルトの実装を登録するIMediaPlayerProxyFactory
コンポーネントを間接的に作成するコンポーネントにアクセスする15のテストを行っているかもしれません。 SetUp
関数は、十分に実装されたIMediaPlayerProxyFactory
を登録しているので、15個のテストのそれぞれでこれを登録するメンテナンスの負担はありません。 しかし、Test_MediaPlayerProxyFactoryThrowsException
というテストを書いており、私のシステムがIMediaPlayerProxyFactory
コンポーネントのエラーをエレガントに処理していることを確認しています。試験方法では、私は私の特別なモック実装を作成しました、そして今私は、フレームワークに注入したい:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
);
しかしウィンザーはメッセージ「という名前のコンポーネントが既に存在して、Castle.MicroKernel.ComponentRegistrationException
をスローします。 "
すでにmockMediaPlayerProxyFactory
をIMediaPlayerProxyFactory
のデフォルトインスタンスにすることはできますか?既に登録されているコンポーネントは破棄されますか?
documentationによれば、城ウィンザー3は、登録のオーバーライドを可能にするが、私は一例を見つけることができる:
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
ConfigureFor
はBasedOnDescriptor
クラスのメソッドです。私の場合は、FromDescriptor
またはBasedOnDescriptor
を使用していません。
実際の実装では、 '.IsDefault'メソッドの名前を付けて起動する必要はありません。 – bevacqua
答えを更新していただきありがとうございます。 –