I had the same problem with my yorkie, Biscuit. He was very protective, especially of me. I found that when we went to the vet, I would have to drop his leash and then he would stop his aggression towards other dogs and people.
At home, I would have guests ignore him until he approached them a few times. Eventually, with his being ignored, he would climb on their labs and nudge their hands to pet him....imagine that!
When I walked him though, I would have to tell everyone not to pet him as he is a very protective little guy.
I also could never be holding him when a stranger approached...that was almost an invitation to war as far as he was concerned. But, if I put him on the ground....he was a different dog!
Hope this helps.