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;
}
}