I really like the looks of this project, but tying the background work to method expressions seems really fragile and could encourage bad separation of concerns. Have you thought about how you could queue messages/POCO objects and then register consumers, instead of serialized method expressions? This would allow less worry about method signatures changing between releases.
The difference between.
public ActionResult PlaceOrder(int shoppingCart){
DoSynchWork();
BackgroundJob.Enqueue(() => DomainLogic.DoOrderStuff(shoppingCart));
return View();
}
And:
public ActionResult PlaceOrder(int shoppingCart){
DoSynchWork();
BackgroundJob.Enqueue(() => new OrderPlaced(shoppingCart));
return View();
}
Again, great work, and I think this is something that .NET really needs because it’s so common and shouldn’t need to be heavyweight, complicated, or something that we have to pay for (nservicebus, servicestack). Look forward to your response