What is the correct way to create and add components at runtime ?

Strictly speaking, InitializeComponent is actually concept of actor initialization, not component initialization. It’s a sort of contract that lets the component do basic initialization stuff at a time where state is mostly initialized, compared to the constructor where your component won’t even know its parent actor. As such, it is called automatically when actors initialize their child components, and this is why it’s not getting called automatically in this case.

Outside of that, feel free to call it manually or, if you still want it automated, look into OnRegister, which will happen in the RegisterComponentWithWorld call that you have to do anyway.

Furthermore, note that all attaching the component and setting transforms is only necessary if you’re dealing with a scene component. If your component doesn’t need a spatial representation, save yourself the trouble and overhead and inherit from actor component directly.