Welcome to the March 12, 2008 Weekly drop of Unity
Hi everyone, this is the latest weekly release for the Unity application block.
This week, the biggest change is: we have an installer! Since this is a preview, we make no promises that the installer will be well behaved. Having said that, I've run it on my machine quite a few times and it hasn't deleted anything important yet. ;-)
We'd really appreciate if folks could try it out and let us know if it misbehaves. The installer currently:
- Puts binaries into Program files
- installs the help chm
- adds the program group
- adds our binary directory to the registry so that our DLL's show up in Visual Studio's "Add Reference" dialog
The source code and quickstarts are included as zip files that are installed as part of the MSI.
Please give feedback on the packaging!
New Features
Feature wise, the major new feature is a new API for configuring injection. Yes, this means you don't need to use attributes to configure which constructor, properties, or methods are injected at resolution time. This feature is currently implemented via the extension API; we are considering moving it to the main API later depending on what people thing. Please look at
ConfiguringInjection for more details.
Other Changes
The UnityContainer.RegisterInstance method will now throw if you pass it a null LifetimeManager.
There was a potential deadlock with the ContainerControlledLifetimeManager that has been fixed. As part of that work, we've added a "IRecovery" interface and collection to the BuildContext. This supports strategies that need to to a "try/catch" across the Pre/Post boundary. If an exception is raised by a strategy, all the IRecovery instances in the context will be executing, allowing for cleanup.
The locking approach in the PolicyList was reworked to remove the read locks. This slows down the write case, but in general usage reading policies happens far more often than writing. The change reduced our thread contention rate by over 90%.