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 回答