私はテスト目的で依存関係注入を使用して実装された一連のWCFサービスを持っています。私はただのインターフェイスを使用して、サービスコンストラクタのコンポーネントとしてそれらを注入リポジトリとWCFサービスの両方をあざけることができ、私のユニットテストのようWCFと依存性注入
基本的にこれらのサービスは、時々、お互いを呼び出します。
これは、これらのサービスをどのような依存関係もなく適切にテストできるので、素晴らしいことです。
は、私はまた、(ごみの多くを作成します)Visual Studioのサービス参照を使用しないようにするために、自分のプロキシを実装しているので、私はのChannelFactory CreateChannelメソッドを使用しています。
私は少し生きている環境で起こることを心配しています。
何が起こるかというと、他のWCFサービスを呼び出す私のWCFサービスは、コンストラクタで、私は一度使用このオブジェクトを配置することはできません。このため、注入され、この外部コンポーネントのインスタンスを1つだけ持っていることです。
これは問題を引き起こすでしょうか? ガベージコレクタはそれを処理しますか? 接続は開いたままですか? このアプローチは間違っていますか?
ありがとうございます。
お返事をお寄せいただきありがとうございますが、私の問題は、あなたがメッセージレベルのセキュリティなどの横断的関心事に適用するために、他の
IChannelInvoker<T>
デコレータを追加できるように呼び出しは、また、構成可能です接続を閉じる方法はありません。私はコンポーネントとしてWCF/Webサービスを注入し、サービス接続を適切に処理する方法を知りたいです。問題は、それをコンストラクタのパラメータとして持つことは、クラスレベルで私はそのインスタンスを1つしか持たず、別のメソッドが呼び出されたときに閉じられると例外が発生するということです。また、デフォルトでは、各サービスコールは異なるインスタンスであるため、これはたぶん哲学上の問題です。それが理にかなっていることを願っています。 – matteo75
@ matteo75あなたのアプローチが「外部コンポーネント」であるかどうかは、私には分かりませんでした。チャンネルの工場なら、私は処分について心配する必要はありません。私はあなたのアプローチは良いと思うが、私はあなたのサービス実装がIDisposableを実装し、あなたに外部コンポーネントを処分させるだろう。 WCFがそれを尊重していることを確認するためにそこに侵入してください。 –
私はChannelFactoryを使用していますが、現時点ではサービス廃棄を実装していません。私はそれがうまくいくと思ったが、私は、このリリースサービスの接続に起因する可能性のあるメモリの増加する使用(リサイクル後にリリースされる)にIISが気づいている。私は100%確信しているわけではありませんが、Dependency InjectionアーキテクチャのClose/Disposeサービスのベストプラクティスを知ることは素晴らしいことです。 – matteo75