I do not propose removal of StorageClassFactory, I'm saying that maybe we can get rid of the singleton. StorageClassFactory instance could become a Butler attribute if Butler is the only place where we need to call the factory. And clearly I do not know about all use cases for the factory, maybe there is a reasonable use cases for having that singleton outside butler. I have encountered that when I needed to register new StorageClass, but that potentially can be done via Butler method.
I could live with dynamic storageClass property in DatasetType, still using that approach means that Butler needs to be initialized/configured when accessing that property, which is hard to enforce. To me it feels cleaner/safer if we only try to instantiate StorageClass inside butler if possible.