あなたはAOPについて話している-Aspect Oriented Programming
「作業」をラムダとして渡す方法は次のとおりです。
public partial static class Aspect
{
public static T HandleFaultException<T>( Func<T> fn )
{
try
{
return fn();
}
catch( FaultException ex )
{
Logger.log(ex);
throw;
}
}
}
それを使用するには:
return Aspect.HandleFaultException( () =>
{
// call WCF
}
);
同じ目標を達成する方法は他にもあり、商用製品もありますが、私はこの方法が最も明確で柔軟であると考えています。
たとえば、クライアントを作成および破棄するアスペクトを作成できます。
public partial static class Aspect
{
public static T CallClient<T>( Func<Client, T> fn )
{
using ( var client = ... create client ... )
{
return fn( client );
}
}
}
など:
return Aspect.CallClient( client =>
{
return client.Method( ... );
}
);
次に、通常適用するすべてのアスペクトをラップして、1 つのマスター アスペクトを作成します。