code_junkie

Presenter injection in Model-View-Presenter pattern with StructureMap

Nov 14th, 2011
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. public partial class _Default : Page, IEmployeeView
  2. {
  3. private EmployeePresenter _presenter;
  4.  
  5. private EmployeePresenter Presenter
  6. {
  7. set
  8. {
  9. _presenter = value;
  10. _presenter.View = this;
  11. }
  12. }
  13. }
  14.  
  15. public partial class _Default : Page, IEmployeeView
  16. {
  17. private EmployeePresenter _presenter;
  18.  
  19. private EmployeePresenter Presenter
  20. {
  21. set
  22. {
  23. _presenter = value;
  24. _presenter.View = this;
  25. }
  26. }
  27.  
  28. protected void Page_Load(object sender, EventArgs e)
  29. {
  30. ObjectFactory.BuildUp(this);
  31. }
  32. }
  33.  
  34. public partial class _Default : Page, IEmployeeView
  35. {
  36. private EmployeePresenter _presenter;
  37.  
  38. public EmployeePresenter Presenter
  39. {
  40. get
  41. {
  42. if (_presenter == null)
  43. {
  44. ObjectFactory.BuildUp(this);
  45. }
  46.  
  47. return _presenter;
  48. }
  49. set
  50. {
  51. _presenter = value;
  52. _presenter.View = this;
  53. }
  54. }
  55. }
  56.  
  57. public partial class _Default : Page, IEmployeeView
  58. {
  59. private EmployeePresenter _presenter;
  60.  
  61. private EmployeePresenter Presenter
  62. {
  63. get
  64. {
  65. if (_presenter == null)
  66. {
  67. _presenter = ObjectFactory.GetInstance<EmployeePresenter>();
  68. _presenter.View = this;
  69. }
  70.  
  71. return _presenter;
  72. }
  73. }
  74. }
  75.  
  76. public partial class _Default : Page, IEmployeeView
  77. {
  78. private EmployeePresenter _presenter;
  79.  
  80. private EmployeePresenter Presenter
  81. {
  82. get
  83. {
  84. if (_presenter == null)
  85. {
  86. Presenter = ObjectFactory.GetInstance<EmployeePresenter>();
  87. }
  88.  
  89. return _presenter;
  90. }
  91. set
  92. {
  93. _presenter = value;
  94. _presenter.View = this;
  95. }
  96. }
  97. }
  98.  
  99. public partial class _Default : AbstractPage, IEmployeeView
  100. {
  101. private EmployeePresenter presenter;
  102.  
  103. private EmployeePresenter Presenter
  104. {
  105. set
  106. {
  107. presenter = value;
  108. presenter.View = this;
  109. }
  110. }
  111. protected override void Do_Load(object sender, EventArgs args)
  112. {
  113. //do "on load" stuff
  114. }
  115.  
  116. }
  117.  
  118. public abstract class AbstractPage : Page
  119. {
  120. protected void Page_Load(object sender, EventArgs e)
  121. {
  122. ObjectFactory.BuildUp(this);
  123. this.Do_Load(sender,e);
  124. //template method, to enable subclasses to mimic "Page_load" event
  125.  
  126. }
  127. //Default Implementation (do nothing)
  128. protected virtual void Do_Load(object sender, EventArgs e){}
  129. }
  130.  
  131. protected override void OnInit(EventArgs e)
  132. {
  133. StructureMap.ObjectFactory.BuildUp(this);
  134. base.OnInit(e);
  135. }
  136.  
  137. public partial class Employee : View, IEmployeeView
  138. {
  139. public ViewPresenter Presenter { get; set; }
  140. private void Page_Load(object sender, EventArgs e){}
  141. }
  142.  
  143. static T GetView<T>()
  144. {
  145. return (T) HttpContext.Current.Handler;
  146. }
  147.  
  148. public abstract class ViewBasePage<TPresenter, TView> :
  149. Page where TPresenter : Presenter<TView>
  150. {
  151. protected TPresenter _presenter;
  152.  
  153. public TPresenter Presenter
  154. {
  155. set
  156. {
  157. _presenter = value;
  158. _presenter.View = GetView();
  159. }
  160. }
  161.  
  162. /// <summary>
  163. /// Gets the view. This will get the page during the ASP.NET
  164. /// life cycle where the physical page inherits the view
  165. /// </summary>
  166. /// <returns></returns>
  167. private static TView GetView()
  168. {
  169. return (TView) HttpContext.Current.Handler;
  170. }
  171.  
  172. protected override void OnPreInit(EventArgs e)
  173. {
  174. ObjectFactory.BuildUp(this);
  175. base.OnPreInit(e);
  176. }
  177. }
  178.  
  179. public partial class _Default :
  180. ViewBasePage<EmployeePresenter, IEmployeeView>, IEmployeeView
  181. {
  182. protected void Page_Load(object sender, EventArgs e)
  183. {
  184. if (!Page.IsPostBack)
  185. {
  186. _presenter.OnViewInitialized();
  187. }
  188.  
  189. _presenter.OnViewLoaded();
  190. Page.DataBind();
  191. }
  192.  
  193. #region Implementation of IEmployeeView
  194.  
  195. ...
  196.  
  197. #endregion
  198. }
Add Comment
Please, Sign In to add comment