Ok, I see. You can actually run the code from anywhere in your module if you inject IWorkContextAccessor and IShapeFactory.
dynamic shape = _shapeFactory;
However; this is a very manual way of doing things. Why don't widgets work for you? They are doing exactly the same thing, pushing shapes into layout zones; you can even have widgets appear in your new PopupsContent zone. So why not just expose a widget
from your module, and then you can configure in the admin any zone for it that you like, with custom layer rules if you need to control when it shows.