could we just check if the returnedValue was defined and if it was we'll return it, otherwise we'll return an instance? that would make the difference between Service and Factory even smaller (at the cost of incompatibility with the `new` operator)