1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using AspNetCoreDefaultHost.Pages.Basic;
- using AspNetCoreSsrTemplateEngine;
- using AspNetCoreSsrTemplateEngine.DataBoundContext;
- using AspNetCoreSsrTemplateEngine.Renders;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Logging;
- using System;
- using System.Linq;
- using System.Reflection;
- using Unity;
- namespace AspNetCoreDefaultHost.Configs
- {
- internal class HostConfig
- {
- public static IUnityContainer RootContainer { get; private set; }
- public static IReadonlyDataBindContext RootDataBindContext { get; private set; }
- public static IComponentResolver RootComponentResolver { get; private set; }
- public static void Init(IServiceProvider services)
- {
- var con = new UnityContainer();
- var dbc = new SimpleDataBindContext();
- RootContainer = con;
- RootDataBindContext = dbc;
- RootComponentResolver = new UnityContainerComponentResolver(con);
- con.RegisterInstance(services);
- LoadGlobalConfig(dbc);
- RegisterComponents(con);
- }
- private static void RegisterComponents(IUnityContainer con)
- {
- var logger = con.Resolve<IServiceProvider>().GetRequiredService<ILogger<HostConfig>>();
- var components = Assembly.GetExecutingAssembly().GetTypes()
- .Where(p => p.IsAbstract == false && p.IsSubclassOf(typeof(ComponentBase)))
- .Select(Activator.CreateInstance)
- .Cast<ComponentBase>().ToArray();
- foreach (var component in components)
- {
- logger.LogInformation($"Registering component `{component.GetType().FullName}'");
- con.RegisterInstance(component.GetType(), component);
- con.RegisterInstance<IRender>(component.GetType().Name, component);
- }
- foreach (var component in components)
- {
- logger.LogInformation($"Initializing component `{component.GetType().FullName}'");
- component.Init();
- }
- }
- private static void LoadGlobalConfig(SimpleDataBindContext dbc)
- {
- dbc.PutValue("SITE_NAME", "STE:DEMO");
- }
- }
- }
|