Constuctor injection with Unity 2.0

18 мар. 2011 г. | | |

Пример Constructor Injection на Unity 2.0.


Пусть есть интерфейс IEmployee и класс, его реализующий:

interface IEmployee
{      
       int Age { get; set; }
       string Name { get; set; }
        string Surname { get; set; }
        string GetPosition();       
}
class Employee : IEmployee
    {       
        #region IPerson Members

        public int Age { get ;  set ; }

        public string Name  { get ;  set ;   }
        public string Surname   { get; set;  }

        public String GetPosition()
        {
            return position.Position;
        }
        #endregion
        IPosition position;
        public Employee(IPosition _position)
        {
            position = _position;
        }
    }


А так же есть интерфейс IPosition и набор классов, его реализующих:

public interface IPosition
    {
        string Position { get; }       
    }

    public class JustEmployee : IPosition
    {
        public string Position { get { return "Just employee"; } }        
    }

    public class Manager : IPosition
    {
        public string Position { get { return "Manager"; } }       
    }

    public class Boss : IPosition
    {
        public string Position { get { return "Boss"; } }       
    }

По названию легко догадаться, что IPosition представляет должность работника. Класс Employee имеет конструктор с параметром IPosition. Пример создания Employee с аргументом(IPosition) нужного типа с помощью Unity:

static void Main(string[] args)
        {           
            IUnityContainer unity = new UnityContainer();
            unity.RegisterType<IPosition, JustEmployee>()
                .RegisterType<IPosition, Manager>("Manager")
                .RegisterType<IPosition, Boss>("Boss")     
                .RegisterType<IEmployee,Employee>(new InjectionConstructor(typeof(IPosition)))
                .RegisterType<IEmployee,Employee>("Boss", new InjectionConstructor(typeof(Boss)))
                .RegisterType<IEmployee,Employee>("Manager", new InjectionConstructor(typeof(Manager)));

            List employees = new List<IEmployee>();           
            var emp = unity.Resolve<IEmployee>();
            emp.Name = "John";
            emp.Surname = "Malkovich";
            emp.Age = 35;
            employees.Add(emp);
            var manager = unity.Resolve<IEmployee>("Manager");
            manager.Age = 44;
            manager.Name = "Peter";
            manager.Surname = "Branch";
            employees.Add(manager);
            var boss = unity.Resolve<IEmployee>("Boss");
            boss.Name = "Bill";
            boss.Surname = "Millioner";
            boss.Age = 99;
            employees.Add(boss);                       
            foreach(var employee in employees)
            {
                Console.WriteLine("Person: " + employee.Name + " " + employee.Surname + ", " + employee.Age + ", " + employee.GetPosition());
            }
        }

Имеем:

0 коммент.:

Отправить комментарий