Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. using System;
  2. using StructureMap;
  3.  
  4. namespace ConsoleApplication1
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. var container = new Container(_ =>
  11. {
  12. _.For<IWorker1>().Use<Worker1>();
  13. _.For<IWorker2>().Use<Worker2>();
  14. _.For<IRunAll>().Use<RunAll>();
  15. _.For<ILog>().Use<Logger>();
  16. });
  17.  
  18. container.GetInstance<IRunAll>().Run();
  19. }
  20. }
  21.  
  22. public interface IRunAll
  23. {
  24. void Run();
  25. }
  26.  
  27. public class RunAll : IRunAll
  28. {
  29. private readonly IWorker1 _worker1;
  30. private readonly IWorker2 _worker2;
  31. private readonly IContainer _container;
  32.  
  33. public RunAll(IWorker1 worker1, IWorker2 worker2, IContainer container)
  34. {
  35. _worker1 = worker1;
  36. _worker2 = worker2;
  37. _container = container;
  38. }
  39.  
  40. public void Run()
  41. {
  42. using (var nested = _container.GetNestedContainer())
  43. {
  44. nested.Configure(_ => { _.For<ILog>().Use<Logger1>(); });
  45. _worker1.Run();
  46. }
  47. using (var nested = _container.GetNestedContainer())
  48. {
  49. nested.Configure(_ => { _.For<ILog>().Use<Logger2>(); });
  50. _worker2.Run();
  51. }
  52. }
  53. }
  54.  
  55. public interface IWorker
  56. {
  57. void Run();
  58. }
  59.  
  60. public interface IWorker1 : IWorker { }
  61. public interface IWorker2 : IWorker { }
  62.  
  63. public class Worker1 : IWorker1
  64. {
  65. private readonly ILog _log;
  66.  
  67. public Worker1(ILog log)
  68. {
  69. _log = log;
  70. }
  71.  
  72. public void Run()
  73. {
  74. _log.Info("worker 1");
  75. }
  76. }
  77.  
  78. public class Worker2 : IWorker2
  79. {
  80. private readonly ILog _log;
  81.  
  82. public Worker2(ILog log)
  83. {
  84. _log = log;
  85. }
  86.  
  87. public void Run()
  88. {
  89. _log.Info("worker 2");
  90. }
  91. }
  92.  
  93. public interface ILog
  94. {
  95. void Info(string message);
  96. }
  97.  
  98. public class Logger : ILog
  99. {
  100. public void Info(string message)
  101. {
  102. Console.WriteLine(message);
  103. }
  104. }
  105.  
  106. public class Logger1 : ILog
  107. {
  108. public void Info(string message)
  109. {
  110. Console.WriteLine($"[1] {message}");
  111. }
  112. }
  113. public class Logger2 : ILog
  114. {
  115. public void Info(string message)
  116. {
  117. Console.WriteLine($"[2] {message}");
  118. }
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement