So, wasn't this the exact reason why we had the GAC in .NET framework ?
If I have referenced MyLogger.dll that implements ILogger() in MyWebPart.dll;
and if I happen to upgrade MyLogger.dll to version 2.0 (which uses a different implementation, but the interface is the same);
I should be able to configure my environment to use MyLogger.dll version 2.0 using .NET configuration.
Why do we need a service locator if the GAC can provide us the (modified) assembly to use at runtime?
Doesn't this add more complexity and configuration requirement to the whole project?