using System; using TinaX.Container; using TinaX.Options.Internal; using UnityEngine; namespace TinaX.Options { public static class OptionsServiceContainerExtensions { public static IServiceContainer AddOptions(this IServiceContainer services) { if(services.SingletonIf(out var bd)) { bd.SetAlias(); } return services; } /// /// Configure and inject it into the service container /// 添加配置,并注入到服务容器 /// /// /// /// /// public static IServiceContainer Configure(this IServiceContainer services, Action configureOptions) where TOptions : class { var options = services.DoConfigure(typeof(TOptions), (opt)=> { configureOptions.Invoke((TOptions)opt); }, null); var generic_options = new Options(options); services.Instance>(generic_options); return services; } /// /// Configure /// /// /// /// /// public static IServiceContainer Configure(this IServiceContainer services, Type type, Action configureOptions) { services.DoConfigure(type, configureOptions, null); return services; } private static Internal.Options DoConfigure(this IServiceContainer services, Type type, Action configureOptions, string typeName = null) { var options = new TinaX.Options.Internal.Options(configureOptions, services, type); if (services.TryGet(out var optionsMgr)) { optionsMgr.Set(typeName ?? type.FullName, Internal.Options.DefaultName, options); } else { Debug.LogError("[TinaX]Options not enable. Please invoke \"IServiceContainer.AddOptions\"."); } return options; } } }