Guest User

Untitled

a guest
Feb 19th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. private static void RegisterType(ContainerBuilder builder)
  2. {
  3. builder.RegisterType<MyLogger>().As<ILogger>(); //MyLogger принимает в конструкторе IWriter
  4. builder.RegisterType<SimpleWriter>().As<IWriter>();
  5. builder.RegisterType<LogForm>();
  6. }
  7.  
  8. public LogForm(ILogger logger)
  9. {
  10. Logger = logger;
  11. InitializeComponent();
  12. }
  13.  
  14. LogForm можно создать через резолв контейнера (т.к. весь граф ее зависимостей зарегистрирован).
  15. Как лучше создать LogForm?
  16.  
  17. private void btn_OpenForm_Click(object sender, EventArgs e)
  18. {
  19. using (var scope = AutofacConfig.Container.BeginLifetimeScope())
  20. {
  21. var logForm = scope.Resolve<LogForm>();
  22. logForm.Show();
  23. }
  24. }
  25.  
  26. private void btn_OpenForm_Click(object sender, EventArgs e)
  27. {
  28. var logForm = AutofacConfig.Container.Resolve<LogForm>();
  29. logForm.Show();
  30. }
  31.  
  32. private readonly ILifetimeScope _lfScope;
  33. private void btn_OpenForm_Click(object sender, EventArgs e)
  34. {
  35. _lfScope = AutofacConfig.Container.BeginLifetimeScope())
  36. var logForm = _lfScope.Resolve<LogForm>();
  37. logForm.Show();
  38. }
  39.  
  40. private void btn_OpenForm_Click(object sender, EventArgs e)
  41. {
  42. var logForm = new LogForm();//Создавать без DI и зависимостей.
  43. logForm.Show();
  44. }
  45.  
  46. //Изменим класс формы LogForm
  47. public partial class LogForm : Form
  48. {
  49. public ILogger Logger { get; set; } //Сервис
  50. private readonly ILifetimeScope _lfScope; //Управление временем жизни сервиса
  51.  
  52. public LogForm()
  53. {
  54. _lfScope = AutofacConfig.Container.BeginLifetimeScope();
  55. Logger = _lfScope.Resolve<ILogger>();
  56.  
  57. InitializeComponent();
  58. }
  59.  
  60.  
  61. public void DoSomething()
  62. {
  63. //............
  64. }
  65.  
  66.  
  67. protected override void OnClosed(EventArgs e)
  68. {
  69. _lfScope.Dispose();
  70. base.OnClosed(e);
  71. }
  72. }
  73.  
  74. builder.RegisterType<NyLogger>().Named<ILogger>("11").InstancePerLifetimeScope();
  75.  
  76. builder.RegisterType<OtherLogger>().Named<ILogger>("22").InstancePerLifetimeScope();
  77.  
  78. builder.RegisterType<LogForm>()
  79. .WithParameter(new ResolvedParameter(
  80. (pi, ctx) => pi.ParameterType == typeof(ILogger),
  81. (pi, ctx) => ctx.ResolveNamed<ILogger>("11")
  82. )).InstancePerDependency();
  83.  
  84. public partial class DoubleLogForm : Form
  85. {
  86. public ILogger Logger1 { get; set; } //Сервис
  87. public ILogger Logger2 { get; set; } //Сервис
  88. private readonly IDisposable _loggerOwner1;
  89. private readonly IDisposable _loggerOwner2;
  90.  
  91. public DoubleLogForm(Owned<ILogger> logger1, Owned<ILogger> logger2)
  92. {
  93. Logger1 = logger1.Value;
  94. _loggerOwner1 = logger1;
  95.  
  96. Logger2 = logger2.Value;
  97. _loggerOwner2 = logger2;
  98.  
  99. InitializeComponent();
  100. }
  101. }
  102.  
  103.  
  104. builder.RegisterType<NyLogger>().Named<ILogger>("NyLogger").InstancePerLifetimeScope();
  105. builder.RegisterType<OtherLogger>().Named<ILogger>("OtherLogger").InstancePerLifetimeScope();
  106.  
  107. builder.RegisterType<DoubleLogForm>()
  108. .WithParameters(new List<ResolvedParameter> {
  109. new ResolvedParameter(
  110. (pi, ctx) => pi.ParameterType == typeof(Owned<ILogger>),
  111. (pi, ctx) => ctx.ResolveNamed<Owned<ILogger>>("NyLogger")),
  112. new ResolvedParameter(
  113. (pi, ctx) => pi.ParameterType == typeof(Owned<ILogger>),
  114. (pi, ctx) => ctx.ResolveNamed<Owned<ILogger>>("OtherLogger"))
  115. }).InstancePerDependency();
  116.  
  117. public partial class LogForm : Form
  118. {
  119. private readonly Owned<ILogger> Logger;
  120.  
  121. public LogForm(Owned<ILogger> logger)
  122. {
  123. this.Logger = logger;
  124. }
  125.  
  126. protected override void OnClosed(EventArgs e)
  127. {
  128. Logger.Dispose();
  129. base.OnClosed(e);
  130. }
  131. }
  132.  
  133. public partial class LogForm : Form
  134. {
  135. private readonly ILogger Logger;
  136. private readonly IDisposable LoggerOwner;
  137.  
  138. public LogForm(Owned<ILogger> logger)
  139. {
  140. this.Logger = logger.Value;
  141. this.LoggerOwner = logger;
  142. }
  143.  
  144. protected override void OnClosed(EventArgs e)
  145. {
  146. LoggerOwner.Dispose();
  147. base.OnClosed(e);
  148. }
  149. }
  150.  
  151. private readonly Func<LogForm> logFormFactory;
  152.  
  153. public MainForm(Func<LogForm> logFormFactory)
  154. {
  155. this.logFormFactory = logFormFactory;
  156. }
  157.  
  158. private void btn_OpenForm_Click(object sender, EventArgs e)
  159. {
  160. logFormFactory().Show();
  161. }
Add Comment
Please, Sign In to add comment