コード例 #1
0
        public MCMGlobalSettingsContainer(IBUTRLogger <MCMGlobalSettingsContainer> logger)
        {
            var settings = new List <GlobalSettings>();
            var allTypes = AppDomain.CurrentDomain
                           .GetAssemblies()
                           .Where(a => !a.IsDynamic)
                           .SelectMany(a => a.GetTypes())
                           .Where(t => t.IsClass && !t.IsAbstract)
                           .Where(t => t.GetConstructor(Type.EmptyTypes) is not null)
                           .ToList();

            var mbOptionScreenSettings = allTypes
                                         .Where(t => typeof(GlobalSettings).IsAssignableFrom(t))
                                         .Where(t => !typeof(EmptyGlobalSettings).IsAssignableFrom(t))
                                         .Where(t => !typeof(IWrapper).IsAssignableFrom(t))
                                         .Select(t => Activator.CreateInstance(t) as GlobalSettings)
                                         .Where(t => t is not null)
                                         .Cast <GlobalSettings>();

            settings.AddRange(mbOptionScreenSettings);

            foreach (var setting in settings)
            {
                logger.LogTrace("Registering settings {type}.", setting.GetType());
                RegisterSettings(setting);
            }
        }
コード例 #2
0
 public override BaseSettings?GetSettings(string id)
 {
     foreach (var settingsContainer in _settingsContainers)
     {
         if (settingsContainer.GetSettings(id) is { } settings)
         {
             _logger.LogTrace("GetSettings {id} returned {type}", id, settings.GetType());
             return(settings);
         }
     }
     _logger.LogWarning("GetSettings {id} returned null", id);
     return(null);
 }
コード例 #3
0
        public MCMGlobalSettingsContainer(IBUTRLogger <MCMGlobalSettingsContainer> logger)
        {
            IEnumerable <GlobalSettings> GetGlobalSettings()
            {
                foreach (var assembly in AccessTools2.AllAssemblies().Where(a => !a.IsDynamic))
                {
                    IEnumerable <GlobalSettings> settings;
                    try
                    {
                        settings = AccessTools2.GetTypesFromAssemblyIfValid(assembly)
                                   .Where(t => t.IsClass && !t.IsAbstract)
                                   .Where(t => t.GetConstructor(Type.EmptyTypes) is not null)
                                   .Where(t => typeof(GlobalSettings).IsAssignableFrom(t))
                                   .Where(t => !typeof(EmptyGlobalSettings).IsAssignableFrom(t))
                                   .Where(t => !typeof(IWrapper).IsAssignableFrom(t))
                                   .Select(t => Activator.CreateInstance(t) as GlobalSettings)
                                   .OfType <GlobalSettings>()
                                   .ToList();
                    }
                    catch (TypeLoadException ex)
                    {
                        settings = Array.Empty <GlobalSettings>();
                        logger.LogError(ex, "Error while handling assembly {Assembly}!", assembly);
                    }

                    foreach (var setting in settings)
                    {
                        yield return(setting);
                    }
                }
            }

            foreach (var setting in GetGlobalSettings())
            {
                logger.LogTrace("Registering settings {type}.", setting.GetType());
                RegisterSettings(setting);
            }
        }