Unity 3 – April 2013
Unity is a lightweight, extensible dependency injection container with support for instance and type interception.
Via NuGet (inside Visual Studio, use the NuGet package manager and search for “unity”)
Developer’s Guide to Dependency Injection using Unity is available in paperback from Amazon.com
Feedback & Issue Reporting
Unity is a lightweight, extensible dependency injection container with support for constructor, property, and method call injection. It facilitates building loosely coupled applications and provides developers with the following advantages:
- Simplified object creation, especially for hierarchical object structures and dependencies.
- Abstraction of requirements; this allows developers to specify dependencies at run time or in configuration and simplify management of crosscutting concerns.
- Increased flexibility by deferring component configuration to the container.
- Service location capability, which allows clients to store or cache the container.
- Instance and type interception (not supported in Unity for Windows Store apps).
Unity is a general-purpose container for use in any type of Microsoft.NET Framework-based application. It provides all of the features commonly found in dependency injection mechanisms, including methods to register type mappings and object instances, resolve objects, manage object lifetimes, and inject dependent objects into the parameters of constructors and methods, and as the value of properties of objects it resolves.
In addition, Unity is extensible. You can write container extensions that change the behavior of the container, or add new capabilities. For example, the interception feature provided by Unity, which you can use to capture calls to objects and add additional functionality and policies to the target objects, is implemented as a container extension.
This release adds support for Windows Store apps as well as the registration by convention feature to ease the task of configuring Unity.
These reusable components and guidance are intended primarily for software developers and software architects. To get the most benefit from this guidance, you should a working knowledge of .NET programming.
Contents of This Release
Microsoft Unity 3 contains the following:
- Binaries. The release includes pre-compiled, strong-named assemblies for all the source code.
- Source code. The release includes the source code for the Unity container, the Unity Interception Mechanism, Unity configuration as well as the source code for the integration packages with ASP.NET MVC and ASP.NET Web API.
- Unit tests. The release includes the unit tests that were created while Unity 3 was being developed.
- Documentation. A separate download for Unity includes documentation, which includes guidance about how to use Unity and a class library reference.
- Hands-on Labs. The Unity Hands-on Labs help you learn about the Unity injection container and Unity interception. Step by step instructions and before and after source code are provided for each lab.
- Supported architectures: x86 and x64.
- Operating systems: Microsoft Windows 8, Microsoft Windows 7, Windows Server 2008 R2, Windows Server 2012.
- .NET Framework: Microsoft .NET Framework 4.5, .NET for Windows Store Apps (previously known as Windows Runtime)
For a rich development environment, the following are recommended:
- Microsoft Visual Studio 2012 (Professional, Ultimate, or Express editions).
Unity was designed to achieve the following goals:
- To promote the principles of modular design through aggressive decoupling of components, business objects, and services.
- To raise awareness of the need to maximize testability when designing applications.
- To provide a fast and lightweight dependency injection container mechanism for creating new object instances and managing existing object instances.
- To expose a compact and intuitive API for developers to use with the container.
- To support a wide range of programming languages, with method overrides that accept generic parameters where the language supports these.
- To implement attribute-driven injection for constructors, property setters, and methods of target objects.
- To provide extensibility through custom and third-party container extensions.
- To provide the performance required in line-of-business applications.
This major release of Unity includes the following new features:
- Registration by convention.
- Support for NetCore (Windows Store apps).
- Resolving objects of type Lazy<T> by Unity.
- The Unity assembly is now Security Transparent.
- Support for ASP.NET MVC and ASP.NET Web API.
The detailed list of all changes is included in the Release Notes.
For an introduction to dependency injection, see the article Inversion of Control Containers and the Dependency Injection pattern by Martin Fowler.
Unity, like many patterns & practices deliverables, is associated with a community site. On this community site, you can post questions, provide feedback, or connect with other users to share ideas. Community members can also help Microsoft plan and test future releases of Unity, and download additional content such as extensions and training material.
Feedback and Support
Questions? Comments? Suggestions? To provide feedback about Unity, or to get help with any problems, visit the Unity Community site. The message board on the community site is the preferred feedback and support channel because it allows you to share your ideas, questions, and solutions with the entire community. Unity is a guidance offering, designed to be reused, customized, and extended. Code-based guidance is shipped "as is" and without warranties. Customers can obtain support through Microsoft Premier Support Services for a fee, but the code is considered by Microsoft support staff as user-written.
Authors and Contributors
Unity 3 was produced by the following individuals:
- Product/Program Management: Grigori Melnik (Microsoft Corporation)
- Architecture/Development: Julian Dominguez (Microsoft Corporation), Fernando Simonazzi and Edgardo Rossetto (Clarius Consulting), Hernan de Lahitte (Digit Factory)
- Testing: Mani Subramanian (Microsoft Corporation), Mariano Grande (Digit Factory), Rathi Velusamy, Lavanya Selvaraj, and Shebu Kollam Valappil (Infosys Technologies Ltd.)
- Performance and Security Testing: Carlos Farre (Microsoft Corporation), Naveen Pitipornvivat and Soranai Chantarayotha (Adecco)
- Documentation: Dominic Betts (Content Master Ltd), Grigori Melnik and Mani Subramanian (Microsoft Corporation), and Fernando Simonazzi (Clarius Consulting)
- Graphic design: Chris Burns
- Editing, pre- and post-production: RoAnn Corbisier, Nelly Delgado, Handan Selamoglu, and Jane Sinyagina (Microsoft Corporation)
- Release management: Nelly Delgado and Grigori Melnik (Microsoft Corporation) and Richard Burte (Channel Catalyst, Inc)
- Business administration support: Kerstin Scott (Microsoft Corporation)
A special thanks to Microsoft colleagues who contributed many ideas and improvements of the Unity Application Block: Bob Brumfield (main contributor to porting Unity to .NET for Windows Store apps), Scott Densmore, Tyler Ohlsen, Chris Tavares, Andrew Oakley, and Hanz Zhang.
Unity 3 Advisory Board:
- Fabian Fernandez Bargas (TellMi)
- Joseph M. Blank (Online Business Systems)
- Bryan Clark (Ethos Solutions)
- Gabriele Giuseppini (Optiver Holding B.V.)
- Deon Heyns
- Matt Kean (Caterpillar Inc)
- Ercenk Keresteci and Trent Swanson (Full Scale 180, Inc.)
- Randy Levy
- Jeremy Likness (Wintellect)
- Andrei Marukovich (AB SCIEX)
- Ksenia Mukhortova (Intel)
- Peter Nilsson (Volvo Information Technology AB)
- Dan Piessens (Centare)
- Peter Ritchie (Peter Ritchie Inc.)
- Luke G. Sigler (Qualcomm Life)
- Jon Wagner (eMoney Advisor)
- Sebastian Weber
- Bill Wilder (DevPartners)
- Matias Woloski (Auth0)
- Walter Wu (Royal Bank of Canada)
- Nuno Centeno, Jason Hogg, Tom Hollander, Robert Jarratt, Michael Lanzetta, Valery Mizonov, Rafael Fernandez Moctezuma, Tyler Ohlsen, Timothy Stockstill, Christopher Tavares, Michael Thomassy, Rob Vettor (Microsoft Corporation)
Many thanks to the following people who reviewed our new guides and provided meaningful feedback:
- Garret Besser (Avanade)
- Thomas Mueller (CareSeed)
- Peter Ritchie
- Rob Jarratt
- Steven van Deursen (Cutting Edge Internet Technologies)
- Nicholas Blumhardt
- Chris Tavares, Alex Homer, and Tyler Ohlsen (Microsoft Corporation)
Additionally, we thank the following members of the community who commented on our initial vision and the product backlog: Damir Arh (Adacta), Jean-Luc Boucho (Infosys), Srđan Božović (MFC Mikrokomerc), Michael S. Collier (Aditi), Olivier Dahan (E-Naxos), Carlos dos Santos (CDS Informática), Christopher Maneu (Deezer), Paulo Morgado (C# MVP), Raffaele Rialdi (Vevy Europe), and Bruno Sonnino (Revolution Software)
- Microsoft patterns & practices Developer Center
- Microsoft Unity Container Home Page
- Microsoft Enterprise Library Home Page
- Microsoft Prism