Getting started with unity-container
Remarks#
The Unity Container (Unity) is a lightweight, extensible dependency injection container. It facilitates building loosely coupled applications and provides developers with the following advantages: Simplified object creation, especially for hierarchical object structures and dependencies. [https://msdn.microsoft.com/en-us/library/ff647202.aspx]
It should also mention any large subjects within unity-container, and link out to the related topics. Since the Documentation for unity-container is new, you may need to create initial versions of those related topics.
Versions#
Version | Release Notes | Release date |
---|---|---|
2.0.0 | Unity 2 | 2011-05-05 |
2.1.0 | Unity 2.1 | 2011-05-11 |
3.0.0 | Unity 3 | 2013-04-26 |
3.5.0 | Unity 3.5 | 2015-05-15 |
4.0.0 | Unity handed over to OSS community | 2015-10-06 |
Installation
In order to get started, you just need to install the Unity nuget package. Run the following command from the package manager console:
PM> Install-Package Unity
Alternatively, you can use Visual Studio to install Unity on a particular project using the Manage NuGet Packages for Solution option under Tools -> NuGet Package Manager.
Hello World
interface IGreeter
{
void Greet();
}
class Greeter : IGreeter
{
public void Greet()
{
Console.WriteLine("Hello World");
}
}
class SpanishGreeter : IGreeter
{
public void Greet()
{
Console.WriteLine("Hola Mundo");
}
}
class FrenchGreeter : IGreeter
{
public void Greet()
{
Console.WriteLine("Bonjour le Monde");
}
}
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer()
.RegisterType<IGreeter, SpanishGreeter>("spanish")
.RegisterType<IGreeter, FrenchGreeter>("french")
.RegisterType<IGreeter, Greeter>();
//Get default registration. Outputs "Hello World"
var greeter = container.Resolve<IGreeter>();
greeter.Greet();
//Get specific named registration. Outputs "Hola Mundo"
greeter = container.Resolve<IGreeter>("spanish");
greeter.Greet();
//Get all named registrations (excludes the default one)
//Outputs "Hola Mundo" and "Bonjour le Monde"
foreach (var g in container.ResolveAll<IGreeter>())
{
g.Greet();
}
Console.ReadLine();
}
}
Constructor Injection
interface IService
{
void ProcessRequest();
}
interface IRepository
{
IEnumerable<string> GetData();
}
class HelloWorldRepository : IRepository
{
public IEnumerable<string> GetData()
{
return new[] { "Hello", "World" };
}
}
class HelloWorldService : IService
{
private readonly IRepository repo;
public HelloWorldService(IRepository repo)
{
this.repo = repo;
}
public void ProcessRequest()
{
Console.WriteLine(String.Join(" ", this.repo.GetData()));
}
}
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer()
.RegisterType<IRepository, HelloWorldRepository>()
.RegisterType<IService, HelloWorldService>();
//Unity automatically resolves constructor parameters that knows about.
//It will return a HelloWorldService with a HelloWorldRepository
var greeter = container.Resolve<IService>();
//Outputs "Hello World"
greeter.ProcessRequest();
Console.ReadLine();
}
}