Guice is not magic. You can't force it to do something outside of an Injector
, so no, you can't do that, and in fact you shouldn't.
The best way, as you have already noticed, is to make constructor of MySingleton
package-private. That way no one outside of the package will be able to construct it but Guice. Since this package is controlled by you, it is safe assumption that no one will create MySingleton
in other way than via Guice (using your module, of course).
This is not a "bomb". Package-private modifier is intended exactly for this purpose. It is assumed that you control your packages, so it is fine to make constructors and other things package-private and assume that no one but you will call them.