I've learnt tonight that ASP.NET MVC tends to get annoyed when you reuse a controller instance. I have a (rather primitive) factory creating controllers and doing some simple dependency injection. This is a result of a medium trust target environment.
My first pass at a controller factory reused controller instances. This resulted in InvalidOperationExceptions with the message:
The parameters dictionary does not contain a valid value of type 'System.Int32' for parameter 'id' which is required for method 'System.Web.Mvc.ActionResult EditPosting(Int32)' in '<MyController>'. To make a parameter optional its type should either be a reference type or a Nullable type.
Altering the route so that the id property default was an int32 fixed the issue, but this was an ugly hack that fixed the specific manifestation without resolving the issue. The correct fix was to alter the factory to return a new instance every time. Reusing controller instances was a (slightly) simpler implementation so it's technically not premature optimisation at fault here. I shall remember that base types may have state in future.