ObjectBuilder Sample
The following code shows a simple example to use the ObjectBuilder as an IOC / DI container. ObjectBuilder is a component of the Microsoft Enterprise Application Block it is also the backbone of the Unity DI.
using System; using System.Collections.Generic; using System.Text; using Microsoft.Practices.ObjectBuilder; namespace StudyObjectBuilder.ConsoleApplication { /// <summary> /// /// </summary> public class Program { /// <summary> /// /// </summary> /// <param name="args"></param> public static void Main(string[] args) { Locator l = new Locator(); l.Add(typeof(ILifetimeContainer), new LifetimeContainer()); Builder b = new Builder(); b.Strategies.Clear(); b.Strategies.AddNew<CreationStrategy>(BuilderStage.Creation); b.Strategies.AddNew<TypeMappingStrategy>(BuilderStage.PreCreation); b.Strategies.AddNew<SingletonStrategy>(BuilderStage.PreCreation); b.Strategies.AddNew<PropertyReflectionStrategy>(BuilderStage.PreCreation); b.Strategies.AddNew<PropertySetterStrategy>(BuilderStage.Initialization); b.Strategies.AddNew<ConstructorReflectionStrategy>(BuilderStage.PreCreation); //b.Strategies.AddNew<MethodReflectionStrategy>(BuilderStage.PreCreation); //b.Strategies.AddNew<MethodExecutionStrategy>(BuilderStage.Initialization); //b.Strategies.AddNew<BuilderAwareStrategy>(BuilderStage.PostInitialization); b.Policies.SetDefault<ICreationPolicy>(new DefaultCreationPolicy()); b.Policies.Set<ISingletonPolicy>(new SingletonPolicy(true), typeof(ConsoleLogger), null); b.Policies.Set<ITypeMappingPolicy>(new TypeMappingPolicy(typeof(TraceLogger), null), typeof(ILogger), null); ConsoleLogger logger = b.BuildUp<ConsoleLogger>(l, null, null); Person p = b.BuildUp<Person>(l, null, null); p.Id = 1; p.Name = "John"; p.Greet(); Person p2 = b.BuildUp<Person>(l, null, null); p2.Id = 2; p2.Name = "Bob"; p2.Greet(); Console.ReadLine(); } } /// <summary> /// /// </summary> public class Person { private ILogger _logger; //[Microsoft.Practices.ObjectBuilder.Dependency(CreateType = typeof(ConsoleLogger))] //public ILogger Logger //{ // get { return _logger; } // set { _logger = value; } //} private int _id; public int Id { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } /// <summary> /// /// </summary> /// <param name="logger"></param> public Person([Microsoft.Practices.ObjectBuilder.Dependency(CreateType = typeof(ConsoleLogger))]ILogger logger) { _logger = logger; } /// <summary> /// /// </summary> public void Greet() { _logger.Write("Hello " + _name); } } /// <summary> /// /// </summary> public interface ILogger { /// <summary> /// /// </summary> /// <param name="message"></param> void Write(string message); } /// <summary> /// /// </summary> public class TraceLogger : ILogger { public TraceLogger() { } #region ILogger Members /// <summary> /// /// </summary> /// <param name="message"></param> public void Write(string message) { System.Diagnostics.Trace.WriteLine(message); } #endregion } /// <summary> /// /// </summary> public class ConsoleLogger : ILogger { public ConsoleLogger() { } #region ILogger Members /// <summary> /// /// </summary> /// <param name="message"></param> public void Write(string message) { Console.WriteLine(message); } #endregion } }