ninject/ninject — pull request #142 by onovotny (2014-07-24 14:38:43+00:00)
Title: This is a fresh PCL implementation using the "Bait & Switch" technique

This version should be 100% compatible with all of the existing extensions as it's implemented a different way than the prior PCL version. It's done using the [Bait-and-Switch](http://log.paulbetts.org/the-bait-and-switch-pcl-trick/) technique.

Instead of splitting functionality into two libs, Ninject and Ninject.Core, based on platform specifics, it now all compiles to a single DLL, Ninject, per-platform. This is much like what's done today to produce a different Ninject for each platform.

What's new/different here is that there's also a PCL "shim/façade" that has the same dll name, public key, types/surface area as all the others. Instead of implementing code though, it'll throw NotImplementedExceptions.

They key here is that the PCL assembly is just a reference assembly. Other Portable Libs can reference it to get at the types/interfaces. At runtime though, the "real" platform version is used. NuGet makes this easy because platform-specific versions always outrank PCL's. The user needs to just make sure they add the Ninject nuget to both their PCL and to their "main" app. That way, the "real" ninject lib from the main app will be in the output directory and all will work.