ActivityFilter - aceryan-consulting/aceryansoft.codeflow GitHub Wiki
A common ActivityFilter need is to run code before and after each activity.
For instance let's add an ActivityFilter to log each activity execution details.
var aicodeFlow = new CodeFlow();
aicodeFlow.StartNew(cfg => {
cfg.WithContext(() => new AiContext())
.UseMiddleware(exceptionHandlingMiddleware)
.UseActivityFilter((ctx, inputs, next) =>
{
//run code before each activity
var res = next(ctx, inputs);
// log each activity details : res.Status, res.ActivityName, res.StartDate, res.Duration , res.Error , res.ErrorCode, etc ...
//run code after each activity
return res;
});
})
.Call((ctx, inputs) =>
{
Console.WriteLine("Hello World");
})
.Close();
aicodeFlow.Execute();
ActivityFilter can also be define as a class implementing ICodeFlowActivityFilter
public class LogActivityFilter : ICodeFlowActivityFilter
{
public void OnActivityExecuting(ICodeFlowContext context, params object[] inputs)
{
//run code before each activity
}
public void OnActivityExecuted(ICodeFlowContext context, IExecutionLog res, params object[] inputs)
{
// log each activity details : res.Status, res.ActivityName, res.StartDate, res.Duration , res.Error , res.ErrorCode, etc ...
//run code after each activity
}
}
The ActivityFilter class is now use as follow
var exceptionHandlingMiddleware = new ExceptionHandlingMiddleware();
var logActivityFilter = new LogActivityFilter();
var aicodeFlow = new CodeFlow();
aicodeFlow.StartNew(cfg => {
cfg.WithContext(() => new AiContext())
.UseMiddleware(exceptionHandlingMiddleware)
.UseActivityFilter(logActivityFilter);
})
.Call((ctx, inputs) =>
{
Console.WriteLine("Hello World");
})
.Close();
aicodeFlow.Execute();
Continue reading: CodeFlowActivity