I see, it appears the best solution for my use case is just to use the static methods.
At least in most of my applications, using multiple random number generators in a single program is almost always a mistake, since you typically want randomness that is valid across all the sources.
For instance sampling a Beta-Bernoulli model via Bernoulli(Beta(2,2).Sample()).Sample() will not be valid unless both Bernoulli and Beta using the same random number source.
I'd lean towards the default being a singleton and if you want to pass in a new random source to the constructor you can. But I guess this can be done easily enough via the static methods.