It's kind of annoying to have to cast everything, etc...
If you need to cast, then you should review your design. The point of an abstraction not to depend on concrete types.
E.g. your GraphicsFactory::init accepts and interface, but inside you assume it's a specific class. What if I derive another class from IInitiationSettings? init will probably crash, even though init declaration told me I can pass anything that's an IInitiationSettings.
Of course, IInitiationSettings should be a data object, but this has already been address in other posts.