2
0

WinFormHostBuilderExtensions.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using FastGithub.Windows.Hosting;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using System;
  4. using System.Windows.Forms;
  5. namespace Microsoft.Extensions.Hosting
  6. {
  7. /// <summary>
  8. /// IHostBuilder的WinForm扩展
  9. /// </summary>
  10. public static class WinFormHostBuilderExtensions
  11. {
  12. /// <summary>
  13. /// 指定WinForm的主窗体
  14. /// </summary>
  15. /// <remarks>
  16. /// * 该方法需要在services.AddHostedService()之前调用
  17. /// </remarks>
  18. /// <typeparam name="TMainForm"></typeparam>
  19. /// <param name="hostBuilder"></param>
  20. /// <returns></returns>
  21. public static IHostBuilder UseWinForm<TMainForm>(this IHostBuilder hostBuilder) where TMainForm : Form
  22. {
  23. return hostBuilder.ConfigureServices((context, services) =>
  24. {
  25. services
  26. .AddSingleton<TMainForm>()
  27. .AddSingleton<IWinFormDispatcher, WinFormDispatcher>()
  28. .AddHostedService<WinFormHostedService<TMainForm>>();
  29. });
  30. }
  31. /// <summary>
  32. /// 使用WinForm生命周期
  33. /// </summary>
  34. /// <remarks>
  35. /// * 关闭主窗体或调用Appliaction.Exit()之后生命结束
  36. /// </remarks>
  37. /// <param name="hostBuilder"></param>
  38. /// <returns></returns>
  39. public static IHostBuilder UseWinFormHostLifetime(this IHostBuilder hostBuilder)
  40. {
  41. return hostBuilder.UseWinFormHostLifetime(c => { });
  42. }
  43. /// <summary>
  44. /// 使用WinForm生命周期
  45. /// </summary>
  46. /// <remarks>
  47. /// * 关闭主窗体或调用Appliaction.Exit()之后生命结束
  48. /// </remarks>
  49. /// <param name="hostBuilder"></param>
  50. /// <param name="configureOptions">Applicaiton选项</param>
  51. public static IHostBuilder UseWinFormHostLifetime(this IHostBuilder hostBuilder, Action<ApplicationOptions> configureOptions)
  52. {
  53. return hostBuilder.ConfigureServices((context, services) =>
  54. {
  55. services.Configure(configureOptions);
  56. services.AddSingleton<IHostLifetime, WinFormHostLifetime>();
  57. });
  58. }
  59. }
  60. }