0

現在、複数の WCF サービスをホストする小さな App-Server を構築しようとしています。これらのサービス (およびもちろんその依存関係) は、DI/IoC コンテナー (現在は LightCore ですが、CommonServiceLocator を介して使用しているため、簡単に交換できるはずです) によってインスタンス化する必要があります。残念ながら、私は問題に遭遇しました。明らかに、前述の WCF サービスをホストする ServiceHost インスタンスを作成する必要があります。サービスのすべての依存関係を処理するために、カスタマイズされた InstanceProvider と ServiceBehavior を既に構築しましたが、ServiceHost のコンストラクターには、ホストするサービスのサービス タイプが必要です。私のプログラムのこの時点では、DI コンテナーだけが現在使用されている Service 実装を認識しているため、Interface Type しか認識していません。

安上がりな方法は、Service Locator を介してサービス タイプの「ダミー」インスタンスを作成し、ServiceHost コンストラクターに myDummyInstance.GetType() の出力を与えることですが、これは役に立たないインスタンス化と代わりに Service Locator を使用することを見るのが面倒です。 DI...もっと良い方法があるはずです。

アイデアはありますか?:)

4

1 に答える 1

0

それを行う方法は複数あります。

  • 私が好きな方法はとてもシンプルです。サービスのコントラクトを解決するのではなく、サービスの実装自体を解決します。これは、単にそれが WCF が期待するものだからです。私が使用したすべての IoC コンテナーは、型自体を解決し、その依存関係を満たすことができます。
  • もう 1 つの方法は、もう少しハックすることです。サービス ホストのコンストラクタを呼び出すと、 のような呼び出しでサービス コントラクトのタイプを解決しますServiceLocator.Resolve<IContract>().GetType()。それは醜いですが、ダミーの実装を作成するよりもはるかにクリーンです。さらに、渡された型がインフラストラクチャの他の何かに使用されていないかどうかはわからないため、ダミーの型を渡すことは危険です。
于 2011-07-09T15:44:27.523 に答える