How do I assign a governor to control a smart contract?

I understand that you transfer ownership to a multi-sig wallet in order to have the multi-sig owners control changes to a smart contract (via executing proposals).

However, I'm not sure if I've created and deployed a valid governor contract with associated governance token, how do I give it ownership or control of a smart contract? In other words, it seems that only the governor should be able to execute methods on my smart contract.

Welcome to the forum Jeremy!

You can assign the deployer address or another address as the owner in the constructor of the contract. Then you can restrict certain functions to the owner. You can use Open Zeppelin's ownable contract to achieve this. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol

Both a user or another smart contract can hold the ownership role. Just know that if you use the Open Zeppelin's access control, the governor contract will have to deploy the new contract in order to be the owner.

If the governor contract will have to deploy the new contract in order to be the owner, how does Defender delegate control of an Admin proposal to a Governor contract, if the subject of the proposal ( the smart contract) is already deployed and registered in Defender?

Can you post code snippets?

Hmm, my question is, can you transfer ownership to a governor after you deploy a contract, via the transferOwnership() function for instance?

Yes you can and should use transferOwnership to set your Governor instance as the new owner.

You can do this directly in the constructor by defining it like this:

constructor(address governor) {
  transferOwnership(governor);
}