Prevent link depending on FromNode

What is the best way to prevent the creation of a Link, depending on some property of node its being dragged from?

My Link is sub-classes and I've played around with overriding the OnPortChanged() method. I can detect when the illegal condition occurs, but I think its too late to do anything about it because the ToPortChanged sub-hint (1303) doesn't fire until after the link is dropped onto the ToPort and I've already called the base.OnPortChanged() method.
Should I override the ToPort's OnSelectionDropReject() method?

If it’s relatively static, just set the GoPort.IsValidFrom and/or IsValidTo properties.

If it's relatively dynamic (i.e. it's too expensive to update all the ports when some state has changed), you can override GoPort.CanLinkFrom() or CanLinkTo() for predicates that just depend on the port/node itself, or GoPort.IsValidLink(IGoPort) for predicates that require looking at both ports.
You can also achieve similar results by overriding GoToolLinking.IsValidFromPort, IsValidToPort, and/or IsValidLink, if you don't want to subclass any ports but want to change the behavior of GoToolLinkingNew and GoToolRelinking.