Need to instantiate a class extending Monobehaviour

I have a UserInputProcessor class which extends Monobehaviour.
One of its fields is a Controller class I’ve implemented that extends nothing.
One of the fields of this Controller class is a Cooldown class which extends Monobehaviour.

In other words, the User tells the controller what to do. And the controller contains all the cooldowns. Now here’s the pickle. Unity doesn’t let people instantiate objects of type Monobehaviour. The cooldown class needs to extend Monobehaviour in order to use the Invoke functions.

I really do not want to have to pass the GameObject down from the UserInput class to the Controller(s) just for the sake of passing it down to the Cooldowns.

Is there a (clean) way of solving this little pickle?
Also, I cannot hard code which game object to find in the Cooldown class because I’ll be using cooldowns for different players/enemies.

Since Invoke comes from the MonoBehaviour class and they can’t exist withou GameObjects, your options are limited

You can make the GameObject on the fly when assigning the Cooldown field in the Controller class.

Cooldown cool = new GameObject("CooldownObject").AddComponent<Cooldown>();

But perhaps you should consider giving up using Invoke(). I know it’s handy but it’s sort of overkill to inherit a class just to get access to one utility method.

You could use Coroutines or just oldfashioned float timers to time stuff (if that’s why you want to use Invoke)