0

現在、PrismとMEFを使用するSilverlightアプリケーションがあります。このアプリケーションでいくつかのWCFサービスに接続しますが、「コントローラー」クラスを使用して、インスタンス化されたクライアント生成のサービスプロキシオブジェクトを保持します。

私がやりたいのは、このコントローラーにサービス参照を挿入することです(現在IEventAggregatorで行っているように)。これを行う方法がわかりません。サービスコントラクトインターフェイスを実装し、サービスプロキシオブジェクトへの参照を保持するラッパークラスを作成する必要がありますか?

私が今していること:

/// <summary>
/// WCF client used to communitcate with the data WCF service
/// </summary>
private DataClient _dataClient;  // DataClient is the client generated object from a service reference

/// <summary>
/// Region manager for the application
/// </summary>
private IRegionManager _manager;

/// <summary>
/// Application event aggregator
/// </summary>
private IEventAggregator _eventAggregator;

/// <summary>
/// Constructor. Initializes the statistics controller, hooks up all services, and initializes all commands.
/// </summary>
/// <param name="manager"></param>
[ImportingConstructor]
public ZOpportunityController(IRegionManager manager, IEventAggregator events)
{
    _manager = manager;
    _eventAggregator = events;

    //hookup a WCF service used to retrive GP data
    _dataClient = new ZellerGpDataClient();  
    _dataClient.OpenCompleted += new EventHandler<AsyncCompletedEventArgs>(_dataClient_openCompleted);
    _dataClient.GetCustomersCompleted += new EventHandler<GetCustomersCompletedEventArgs>(_dataClient_GetCustomersCompleted);
    _dataClient.OpenAsync();
}

ここでわかるように、コントローラーコンストラクターでサービスに接続しますが、IRegionManagerやIEventAggregatorの場合と同じように、サービスオブジェクトをコントローラーに挿入したいと思います。

編集: このブログ投稿は本当に私が達成しようとしていたことでした。

4

1 に答える 1

2

からクライアントを導き出し、ClientBase<TChannel>サービス契約を実装させます。契約の実装は次のようになります。

public class MyClient : ClientBase<IMyService>, IMyService
{
  void IMyService.DoSomething(Foo bar)
  {
    this.Channel.DoSomething(bar);
  }
}

これで、その実装をMEFまたはその他のコンテナーに登録し、コンストラクターを介して注入することができます。

于 2012-09-12T16:31:15.777 に答える