我已经实现了自定义IParameterInspector
,我想让它在我的服务上执行每一项操作。
我的理解是IParameterInspector
实现只能用于IOperationBehavior
实现,而实习IOperationBehavior
实现只能用于使用属性修饰单个操作。
有没有人知道我是否可以在服务级别注册我的IParameterInspector
,以便它可以为服务中的所有操作执行?
答案 0 :(得分:14)
IParameterInspector
不需要处于IOperationBehavior
级别。它们可以处于IServiceBehavior
级别。在服务级别ApplyDispatchBehavior
方法中,您需要遍历其所有操作并分配检查器行为。
我的课程全部......
[AttributeUsage(AttributeTargets.Class)]
public class ServiceLevelParameterInspectorAttribute : Attribute, IParameterInspector, IServiceBehavior
{
public object BeforeCall(string operationName, object[] inputs)
{
// Inspect the parameters.
return null;
}
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers)
{
if (channelDispatcher == null)
{
continue;
}
foreach(var endPoint in channelDispatcher.Endpoints)
{
if (endPoint == null)
{
continue;
}
foreach(var opertaion in endPoint.DispatchRuntime.Operations)
{
opertaion.ParameterInspectors.Add(this);
}
}
}
}
}