using Autofac; using Autofac.Core; using System; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MAX.Core.DependencyInjection; /// /// 容器 /// public static partial class IocManager { /// /// 默认容器 /// public static IContainer Container { get; internal set; } public static void SetContainer(IContainer container) { Container = container; } /// /// 确定指定的服务在上下文中是否可用。 /// /// /// public static bool IsRegistered() { return Container.IsRegistered(); } /// /// 确定指定的服务在上下文中是否可用。 /// /// /// public static bool IsRegistered(Type serverType) { return Container.IsRegistered(serverType); } public static TService Resolve() { if (Container.IsRegistered()) { return Container.Resolve(); } return default; } public static object Resolve(Type serviceType) { if (Container.IsRegistered(serviceType)) { return Container.Resolve(serviceType); } return default; } public static TService Resolve(params Parameter[] parameters) { if (Container.IsRegistered()) { return Container.Resolve(parameters); } return default; } /// /// 获取所有注册 /// /// /// public static TService[] ResolveAll() { return ResolveAll(typeof(TService)) as TService[]; } /// /// 获取所有注册 /// /// /// public static object[] ResolveAll(Type type) { Type enumerableOfType = typeof(IEnumerable<>).MakeGenericType(type); return (object[])Container.ResolveService(new TypedService(enumerableOfType)); } public static Type GetRegistrationType(string key) { foreach (IComponentRegistration registration in Container.ComponentRegistry.Registrations) { foreach (Service service in registration.Services) { if (service is KeyedService ks) { if (key.Equals(ks.ServiceKey.ToString(), StringComparison.Ordinal)) { if (Container.ComponentRegistry.TryGetServiceRegistration(service, out ServiceRegistration serviceRegistration)) { return serviceRegistration.Registration.Target.Activator.LimitType; } } } } } return null; } }