# IT:AD:Unity # * [[../|(UP)]] {{indexmenu>.#2|nsort tsort}} * See also: * [[IT/AD/StructureMap/HowTo/Register Instances against Open Contracts]] * [[IT/AD/Unity3D/]] * http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison ## Process ## ### Preparation ### Use Unity (ie, *"Tools/Library Package Manager/Manage Packages..."* to search for and install `Unity` into your App. ## Examples ## Try the following Console Application to get a feel for dependency injection. //Register something using one of the lifetime managers: //* TransientLifetimeManager(DEFAULT) -- each time a new one //* ContainerControlledLifetimeManager -- singleton per container //* HierarchicalLifetimeManager -- same as Container, but each nested container gets its own //* PerResolveLifetimeManager - related to Transient (look it up) //* ExternallyControlledLifetimeManager - uses Weaklinks to externally killable resources //* PerThreadLifetimeManager - //unityContainer // .RegisterType(new ContainerControlledLifetimeManager()) // .RegisterType(new PerThreadLifetimeManager()); ////Get the service: //ISomeService someService = unityContainer.Resolve(); ////Use it: //Console.WriteLine(someService.BePolite("Paul")); Example: using System; using Microsoft.Practices.Unity; namespace XAct.Studies.UnityDemo01 { class Program { static void Main(string[] args) { //Create a IoC Dictionary/Builder: IUnityContainer unityContainer = new UnityContainer(); //Register something using one of the lifetime managers: //* TransientLifetimeManager(DEFAULT) -- each time a new one //* ContainerControlledLifetimeManager -- singleton per container //* HierarchicalLifetimeManager -- same as Container, but each nested container gets its own //* PerResolveLifetimeManager - related to Transient (look it up) //* ExternallyControlledLifetimeManager - uses Weaklinks to externally killable resources //* PerThreadLifetimeManager - unityContainer .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new PerThreadLifetimeManager()); //Get the service: ISomeService someService = unityContainer.Resolve(); //Use it: Console.WriteLine(someService.BePolite("Paul")); } } //Define interfaces in another assembly (eg: App.Domain.Services.Contracts) interface ISomeService { string BePolite(string name); } interface ISomeService2 { } //Define instances in another assembly (eg: App.Domain.Services) public class SomeService : ISomeService { public string BePolite(string name) { return string.Format("Hello, {0}.", name); } } public class SomeService2 : ISomeService2{} } Registering it in ServiceLocator: UnityServiceLocator locator = new UnityServiceLocator(container); ServiceLocator.SetLocatorProvider(() => locator); var a = ServiceLocator.Current.GetInstance(); ## Resources ## * http://tanguay.info/web2010/index.php?pg=codeExamples&id=117