Ho un metodo simile:Log catturato eccezioni di fuori del metodo in cui sono stati catturati
public TResult DoSomethingWithLogging<TResult>(Func<TResult> someAction)
{
try
{
return someAction.Invoke();
}
catch (Exception ex)
{
LogException(ex)
throw;
}
Questo metodo viene utilizzato come segue:
var result = DoSomethingWithLogging(() => Foo());
voglio anche registrare le eccezioni che sono state catturato all'interno di Foo()
. Non riesco a utilizzare throw
in catch
all'interno di Foo
.
Come posso rilevare tali eccezioni?
Esempio:
public static string Foo()
{
try
{
return "Foo";
}
catch (Exception)
{
// I have to log this exception too without adding anything to Foo
return "Exception caught";
}
}
Puoi spiegare perché hai questi requisiti? Sembrano molto specifici ed effettivamente paralizzano il modo in cui puoi scrivere un buon codice. Forse possiamo trovare una soluzione migliore adatta alle reali esigenze senza dover mutilare il codice per adattarlo? – Rob
È nell'app MVC. Viene utilizzato nel controller come registrazione dell'importazione dei dati dal file csv.In caso di importazione fallita, dovrei memorizzare informazioni sul problema. Ma ora, quando si verificano determinati problemi, posso semplicemente saltare questa riga nel file. Ma devo ancora loggare perché alcune linee vengono saltate. –
Continuo a pensare che te ne vai nel modo sbagliato. Ad esempio, potresti esporre un evento all'interno di foo che ti consente di rispondere alle eccezioni ignorate. Comunque dall'esterno presupponendo che qualcosa dall'interno di foo sia un cattivo design – Batavia