CustomSingletonModel is a singleton class (only one instance) that is used to passively receive hooks. The constructor parameters determine if it will receive combat hooks, run hooks, or both.

public class HealOnPlaySingleton() : CustomSingletonModel(true, false)
{
    public override async Task AfterCardPlayed(PlayerChoiceContext choiceContext, CardPlay cardPlay)
    {
        await CreatureCmd.Heal(cardPlay.Card.Owner.Creature, 1);
    }
}