It feels odd to be using an exception for flow control here. Could we return a bool that indicates whether or not the instance is being created and let the caller examine it, instead of throwing an exception? It doesn't look like the exception goes further than one level up the stack anyway.