Adviced way to select driver and interface

Interesting paper, but at first sight this is aimed at instantiating different bfm with a constant set of interface signals (the addr and data in the example). In my case also these signals need to change.

Is there even a point in trying to do something using uvm, when you can just compile in some other code? For a particular module it is always the same interface/driver that has to be used.