Preheat your oven to 375.
Bring a medium pot of salted water to a boil. Add the chicken and boil for about 15 minutes, until cooked through.
Remove chicken from the water and let cool about five minutes, then shred.
Place the asparagus in the hot water for 30 seconds. Remove and run under cold water to stop the cooking. Cut the stalks into 2-inch pieces. Pour the water out of the pot.
Melt the butter in the pot until foamy. Add the flour and whisk until it becomes a golden brown. Add the garlic and a good pinch of salt and whisk another few seconds. Gradually add the milk, about a half cup at a time, whisking until creamy and luscious. Add the lemon zest and juice along with another pinch of salt and give it another good whisk to cream it up.
In an 8x8 casserole dish, spoon half a cup of cream sauce in the bottom. Layer half the chicken over the sauce, followed by half the asparagus. Layer half the onion over the asparagus, followed by a cup of the cream sauce.
Layer the rest of the chicken, asparagus and onion and pour the remaining cream sauce over the dish. Sprinkle with cheese.
Bake for 30-35 minutes, or until the cheese is browned and bubbly. Let it cool for about 10 minutes before serving to set, then serve!