我的服务中需要自定义IOperationInvoker。我的工作还不错,但是我并不特别喜欢这样的想法:要将其应用于给定的操作,我必须将其设置为一个属性。我似乎找不到任何有关如何对其进行配置的文档(类似于端点上的MessageInspector)。

我创建了一个实现IEndpointBehavior的CustomBehavior。在ApplyDispathBehavior中,我具有以下内容:

public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
    foreach (var operation in endpointDispatcher.DispatchRuntime.Operations)
    {
        operation.Invoker = new MockServiceOperationInvoker() {Invoker=operation.Invoker };
    }
}


但是,自定义调用程序似乎并不“坚持”。更改是否可以在生命周期的后期被清除?

如果我将行为设为属性,一切都会起作用,但是我宁愿不这样做。有谁知道将自定义OperationBInvoker应用于给定端点中所有方法的更好方法?

非常感谢!

最佳答案

我想我知道了。通过遍历每个操作,我可以为其添加行为。我不知道这是否是最好的方法,但是它确实有效。

public class MockOperationBehavior : BehaviorExtensionElement,  IOperationBehavior, IEndpointBehavior
{
  public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
  {
     foreach (var op in endpoint.Contract.Operations)
     {
         op.Behaviors.Add(this);
     }
  }
}

10-06 05:36