**With the `AddObjectHelper` class**

[![enter image description here][1]][1]

Further to @brockmann's answer

The `AddObjectHelper` class sets up some of the usual suspects for us, including location, rotation and align.


    class OBJECT_OT_add_object(Operator, AddObjectHelper):
        """Create a new Mesh Object"""
        bl_idname = "cylinder.add_object"
        bl_label = "Add Mesh Object"
        bl_options = {'REGISTER', 'UNDO'}
        
        # set other args like name and description for all
        vertices : IntProperty(
                name="Vertices",
                description="Number of Vertices",
                min=0,
                default=32)
        radius : IntProperty(default=2)
        depth : FloatProperty(default=2)
        
        def execute(self, context):

            bpy.ops.mesh.primitive_cylinder_add(
                    vertices=self.vertices,
                    radius=self.radius, 
                    depth=self.depth, 
                    location=self.location, 
                    rotation=self.rotation)

            return {'FINISHED'}

One issue tho is that its draw method puts its stuff first, so may need to add your own draw method to re-sort as desired

        def draw(self, context):
            layout = self.layout
            layout.prop(self, "vertices")
            layout.prop(self, "radius")
            # and so on



  [1]: https://i.sstatic.net/rI35i.png