HostConfig.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using AspNetCoreDefaultHost.Pages.Basic;
  2. using AspNetCoreSsrTemplateEngine;
  3. using AspNetCoreSsrTemplateEngine.DataBoundContext;
  4. using AspNetCoreSsrTemplateEngine.Renders;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Microsoft.Extensions.Logging;
  7. using System;
  8. using System.Linq;
  9. using System.Reflection;
  10. using Unity;
  11. namespace AspNetCoreDefaultHost.Configs
  12. {
  13. internal class HostConfig
  14. {
  15. public static IUnityContainer RootContainer { get; private set; }
  16. public static IReadonlyDataBindContext RootDataBindContext { get; private set; }
  17. public static IComponentResolver RootComponentResolver { get; private set; }
  18. public static void Init(IServiceProvider services)
  19. {
  20. var con = new UnityContainer();
  21. var dbc = new SimpleDataBindContext();
  22. RootContainer = con;
  23. RootDataBindContext = dbc;
  24. RootComponentResolver = new UnityContainerComponentResolver(con);
  25. con.RegisterInstance(services);
  26. LoadGlobalConfig(dbc);
  27. RegisterComponents(con);
  28. }
  29. private static void RegisterComponents(IUnityContainer con)
  30. {
  31. var logger = con.Resolve<IServiceProvider>().GetRequiredService<ILogger<HostConfig>>();
  32. var components = Assembly.GetExecutingAssembly().GetTypes()
  33. .Where(p => p.IsAbstract == false && p.IsSubclassOf(typeof(ComponentBase)))
  34. .Select(Activator.CreateInstance)
  35. .Cast<ComponentBase>().ToArray();
  36. foreach (var component in components)
  37. {
  38. logger.LogInformation($"Registering component `{component.GetType().FullName}'");
  39. con.RegisterInstance(component.GetType(), component);
  40. con.RegisterInstance<IRender>(component.GetType().Name, component);
  41. }
  42. foreach (var component in components)
  43. {
  44. logger.LogInformation($"Initializing component `{component.GetType().FullName}'");
  45. component.Init();
  46. }
  47. }
  48. private static void LoadGlobalConfig(SimpleDataBindContext dbc)
  49. {
  50. dbc.PutValue("SITE_NAME", "STE:DEMO");
  51. }
  52. }
  53. }