Пример 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 коммент.:
Отправить комментарий