It does not exist yet. Use a Lazy<object>
and return null
from the factory.
You can encapsulate that into a Once
class like you said but don't inherit from Lazy<object>
because that would be a misuse of inheritance. Use proper encapsulation.
You can also use the LazyInitializer
class which is a matter of taste.