0

私は、多数の自己ホスト型 WCF サービスを使用して Windows サービスに取り組んでいます。DI/IoC に Autofac を使用しています。

WCF サービスとエンドポイントは app.config で設定され、構成された services を列挙するServiceHostことで、Windows サービスは構成された WCF サービスごとに を自動的に作成して開くことができます。

依存性注入を有効にするために、 の新しいインスタンスごとにAddDependencyInjectionBehavior( docs ) メソッドの呼び出しを追加しますが、このメソッドは具体的にはcontractTypeServiceHostを要求し、この時点ではサービス実装タイプしかありません。

リフレクションを使用して実装されたインターフェイスを探すことでコントラクト タイプを取得できましたが、Autofac を使用するのはこれが初めてのプロジェクトであるため、これがすべて間違っていないことを確認したかったのです。

これに対するエレガントな解決策はありますか、これは悪い習慣と見なされますか、それともこの場合の唯一の方法はリフレクションですか?

どんな入力でも大歓迎です。

4

1 に答える 1

1

ServiceHost のすべてのエンドポイントを列挙し、そこから ContractType を抽出することができます。

ServiceHost host = ...
foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
{
  var contract = endpoint.Contract;
  Type t = contract.ContractType;

  host.AddDependencyInjectionBehavior(t, container);
}
于 2013-05-25T21:18:22.460 に答える