In case, you are writing a contract based on a package key, then the packages that make use of that contract should have a parameter named after the contract name and they will hold the value of the implementation to use. For an example check the search package. It has a parameter named "FtsEngineDriver" set to "openfts-driver".