IT:AD:Unity
- See also:
Summary
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<ISomeService, SomeService>(new ContainerControlledLifetimeManager()) // .RegisterType<ISomeService2, SomeService2>(new PerThreadLifetimeManager()); ////Get the service: //ISomeService someService = unityContainer.Resolve<ISomeService>(); ////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<ISomeService, SomeService>(new ContainerControlledLifetimeManager()) .RegisterType<ISomeService2, SomeService2>(new PerThreadLifetimeManager()); //Get the service: ISomeService someService = unityContainer.Resolve<ISomeService>(); //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<IFoo>();
## Resources ##