Интересно, есть ли способ написать метод или класс, которые добавили бы к любому методу некоторый код, который делится между многими методами. Методы возвращают разные вещи, а некоторые из них просто недействительны.Есть ли способ использовать один метод для управления другими, чтобы избежать дублирования кода?
Ниже приведена часть кода, которая дублируется в методах.
StartTimer(MethodBase.GetCurrentMethod().Name);
try
{
// Actual method body
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "DALPolicy");
if (rethrow)
{
throw;
}
}
finally
{
StopTimer(MethodBase.GetCurrentMethod().Name);
}
Любая помощь была бы принята с благодарностью.
решение Никс применяется к коду выше
public T WrapMethod<T>(Func<T> func)
{
StartTimer(func.Method.Name);
try
{
return func();
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "DALPolicy");
if (rethrow)
{
throw;
}
}
finally
{
StopTimer(func.Method.Name);
}
return default(T);
}
Yeh, я думал, АОП, но что иногда пугающим, чтобы начать использовать для некоторых. Некоторые рамки с открытым исходным кодом для AOP на C#: http://csharp-source.net/open-source/aspect-oriented-frameworks – AaronLS