Advertisement
Guest User

Untitled

a guest
May 26th, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.Composition;
  4. using System.ComponentModel.Composition.Hosting;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace TripIt
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
  16.  
  17. var container = new CompositionContainer(catalog);
  18.  
  19. var tt = container.GetExport<BusinessLogicController>().Value;
  20.  
  21. var tripRequest1 = new TripRequest { TripNumber = Guid.NewGuid(), TripName = "Trip #1" };
  22. var tripRequest2 = new TripRequest { TripNumber = Guid.NewGuid(), TripName = "Trip #2" };
  23. var tripRequest3 = new TripRequest { TripNumber = Guid.NewGuid(), TripName = "Trip #3" };
  24.  
  25. var user1 = new User { ClientID = "A", Username = "User #1" };
  26. var user2 = new User { ClientID = "V", Username = "User #2" };
  27. var user3 = new User { ClientID = "E", Username = "User #3" };
  28.  
  29.  
  30. var controller = new BusinessLogicController(new TripRequestHandlerFactory(new ITripRequestHandler[] { new VectrusTripRequestHandler(), new ExellisTripRequestHandler(), new DefaultTripRequestHandler() }));
  31.  
  32. User.CurrentUser = user1;
  33. controller.Submit(tripRequest1);
  34.  
  35. User.CurrentUser = user2;
  36. controller.Submit(tripRequest2);
  37.  
  38. User.CurrentUser = user3;
  39. controller.Submit(tripRequest3);
  40. }
  41. }
  42.  
  43. public class User
  44. {
  45. public static User CurrentUser { get; set; }
  46.  
  47. public string ClientID { get; set; }
  48. public string Username { get; set; }
  49. }
  50.  
  51. public class TripRequest
  52. {
  53. public Guid TripNumber { get; set; }
  54. public string TripName { get; set; }
  55. }
  56.  
  57.  
  58. public interface ITripRequestHandler
  59. {
  60. bool IsAuthorized(User user);
  61. void Handle(TripRequest tripRequest);
  62. }
  63.  
  64. public interface ITripRequestDefaultHandler : ITripRequestHandler
  65. {
  66.  
  67. }
  68.  
  69. [Export(typeof(ITripRequestHandler))]
  70. public class VectrusTripRequestHandler : ITripRequestHandler
  71. {
  72. void ITripRequestHandler.Handle(TripRequest tripRequest)
  73. {
  74. Console.WriteLine("vectrus business logic applied.");
  75. }
  76.  
  77. bool ITripRequestHandler.IsAuthorized(User user)
  78. {
  79. return user.ClientID == "V";
  80. }
  81. }
  82.  
  83. [Export(typeof(ITripRequestHandler))]
  84. public class ExellisTripRequestHandler : ITripRequestHandler
  85. {
  86. void ITripRequestHandler.Handle(TripRequest tripRequest)
  87. {
  88. Console.WriteLine("exellis business logic applied.");
  89. }
  90.  
  91. bool ITripRequestHandler.IsAuthorized(User user)
  92. {
  93. return user.ClientID == "E";
  94. }
  95. }
  96.  
  97. [Export(typeof(ITripRequestHandler))]
  98. [Export(typeof(ITripRequestDefaultHandler))]
  99. public class DefaultTripRequestHandler : ITripRequestHandler, ITripRequestDefaultHandler
  100. {
  101. void ITripRequestHandler.Handle(TripRequest tripRequest)
  102. {
  103. Console.WriteLine("default business logic applied.");
  104. }
  105.  
  106. bool ITripRequestHandler.IsAuthorized(User user)
  107. {
  108. return true;
  109. }
  110. }
  111.  
  112. public interface ITripRequestHandlerFactory
  113. {
  114. ITripRequestHandler Create();
  115. }
  116.  
  117. [Export(typeof(ITripRequestHandlerFactory))]
  118. public class TripRequestHandlerFactory : ITripRequestHandlerFactory
  119. {
  120. private readonly IEnumerable<ITripRequestHandler> tripRequestHandlers;
  121.  
  122. [ImportingConstructor]
  123. public TripRequestHandlerFactory([ImportMany]IEnumerable<ITripRequestHandler> tripRequestHandlers)
  124. {
  125. this.tripRequestHandlers = tripRequestHandlers;
  126. }
  127.  
  128. ITripRequestHandler ITripRequestHandlerFactory.Create()
  129. {
  130. User user = User.CurrentUser;
  131.  
  132. foreach (var tripRequestHandler in this.tripRequestHandlers)
  133. {
  134. if (!(tripRequestHandler is ITripRequestDefaultHandler))
  135. {
  136. if (tripRequestHandler.IsAuthorized(user))
  137. return tripRequestHandler;
  138. }
  139. }
  140.  
  141. return
  142. this.tripRequestHandlers
  143. .OfType<ITripRequestDefaultHandler>()
  144. .FirstOrDefault();
  145. }
  146. }
  147.  
  148. [Export]
  149. public class BusinessLogicController
  150. {
  151. private readonly ITripRequestHandlerFactory tripRequestHandlerFactory;
  152.  
  153. [ImportingConstructor]
  154. public BusinessLogicController(ITripRequestHandlerFactory tripRequestHandlerFactory)
  155. {
  156. this.tripRequestHandlerFactory = tripRequestHandlerFactory;
  157. }
  158.  
  159. public void Submit(TripRequest tripRequest)
  160. {
  161. var tripRequestHandler = this.tripRequestHandlerFactory.Create();
  162. tripRequestHandler.Handle(tripRequest);
  163. }
  164. }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement