/examples/ioc/PropertyInjectionUsingFluentInterfaces/Program.cs

http://github.com/philiplaureano/LinFu · C# · 97 lines · 67 code · 21 blank · 9 comment · 0 complexity · c01b350de3aff1361f32e583d4d65dec MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using CarLibrary3;
  6. using CarLibrary4;
  7. using LinFu.IoC;
  8. using LinFu.IoC.Interfaces;
  9. namespace PropertyInjectionUsingFluentInterfaces
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. string directory = AppDomain.CurrentDomain.BaseDirectory;
  16. IServiceContainer container = new ServiceContainer();
  17. // Load CarLibrary3.dll; If you need load
  18. // all the libaries in a directory, use "*.dll" instead
  19. container.LoadFrom(directory, "CarLibrary3.dll");
  20. // Inject the OldPerson type
  21. container.Inject<IPerson>("OldPerson").Using<Person>();
  22. container.Initialize<IPerson>("OldPerson")
  23. .With(p =>
  24. {
  25. p.Age = 99;
  26. p.Name = "OldPerson";
  27. });
  28. // Inject the YoungPerson type
  29. container.Inject<IPerson>("YoungPerson").Using<Person>();
  30. container.Initialize<IPerson>("YoungPerson")
  31. .With(p =>
  32. {
  33. p.Age = 16;
  34. p.Name = "YoungPerson";
  35. });
  36. // Inject the DeadEngine type
  37. container.Inject<IEngine>("DeadEngine").Using<DeadEngine>()
  38. .OncePerRequest();
  39. // Inject the OldEngine type
  40. container.Inject<IEngine>("OldEngine").Using<OldEngine>()
  41. .OncePerRequest();
  42. // Inject the BrokenVehicle type into the container
  43. container.Inject<IVehicle>("BrokenVehicle")
  44. .Using<Car>().OncePerRequest();
  45. #region Broken Vehicle Configuration
  46. AddVehicle(container, "BrokenVehicle", "DeadEngine", "YoungPerson");
  47. #endregion
  48. #region Old Vehicle Configuration
  49. AddVehicle(container, "OldVehicle", "OldEngine", "OldPerson");
  50. #endregion
  51. // Inject the OldVehicle type into the container
  52. container.Inject<IVehicle>("OldVehicle")
  53. .Using<Car>().OncePerRequest();
  54. Person person = new Person();
  55. person.Name = "Someone";
  56. person.Age = 18;
  57. container.AddService<IPerson>(person);
  58. var brokenVehicle = container.GetService<IVehicle>("BrokenVehicle");
  59. var oldVehicle = container.GetService<IVehicle>("OldVehicle");
  60. Console.Write("Broken Vehicle: ");
  61. brokenVehicle.Move();
  62. Console.Write("Old Vehicle: ");
  63. oldVehicle.Move();
  64. Console.WriteLine("Press ENTER to continue...");
  65. Console.ReadLine();
  66. }
  67. private static void AddVehicle(IServiceContainer container, string vehicleName, string engineName, string personName)
  68. {
  69. container.Initialize<IVehicle>(vehicleName)
  70. .With((ioc, vehicle) => vehicle.Engine = ioc.GetService<IEngine>(engineName));
  71. // Set the person type
  72. container.Initialize<IVehicle>(vehicleName)
  73. .With((ioc, vehicle) => vehicle.Driver = ioc.GetService<IPerson>(personName));
  74. }
  75. }
  76. }