I have the need to map a number of different classes in my application to specific instances of a class that is in charge of persisting them to/from the back end.

This is conceptually similar to the way Entity Framework creates it's mappings with the DbModelBuilder class.

Should I map all the classes at application startup? (They are identifiable by an interface and an attribute tag) or should the mapping occur when a particular class is first used?

(or both, configurable?)