Initialize this data source instance, optionally registering it once the initialization has finished (This function is non-virtual because its signature may change on derived types, and so should be called directly on an instance of the correct type.