You probably know by now that I'm very fond of centralizing code. I feel the same when it comes to accessing the configuration data. When a method needs configuration data, the method should just call another method, probably a Shared one, to find the needed data. The mechanism that is used should be completely transparent to the calling method.
Now that we've looked at these two important design decisions, let's get down to the nitty gritty. You'll see that I have divided the solution options I'm about to discuss into two parts. The first part discusses how to store the configuration data persistently, and the second part discusses how to access the configuration data from transient storage. I'll start with the first partpersistent storage.