As I know ValueProviderDictionary takes values for binding from 3 places
I
Override Controller.Initialize() and set the ValueProvider property in that method (after calling base.Initialize()).
To avoid reimplementing the entire ValueProviderDictionary, you could just subclass it. The only interesting part is that you'd have to copy a small snippet of ValueProviderDictionary.PopulateDictionary(). In your constructor, call the base constructor, then immediately this.Clear(), followed by this.YourCustomPopulateDictionary(). This should make your code much smaller.