我有一个类 A 类
public class ClassA : IRefreshable
{
}
并在初创公司中注册
services.AddSingleton<ClassA>();
我也将我的服务注册为单例
services.AddSingleton(services);
我还创建了一个名为 RefreshController 的控制器,它在构造函数中接收 IServiceCollection。
public RefreshController(IServiceCollection sc)
{
}
现在在刷新控制器中,我正在使用服务集合来获取注册为单例的所有类型,以实现 IRefreshable,因此在调用刷新端点时,我正在循环访问它们并使用服务提供程序获取实例
this.typesToRefresh = sc.Where(s => s.Lifetime == ServiceLifetime.Singleton &&
s.ServiceType.FullName.ToLower().StartsWith("MyNamespace")
&& typeof(IRefreshable).IsAssignableFrom(s.ImplementationType)).ToList();
typesToRefresh.ForEach(t =>
{
IRefreshable rf = (IRefreshable)sProvider.GetService(t.ServiceType);
rf.Refresh();
});
我的问题是我为同一个注册服务获得了 2 个实例。任何想法??
好的!事实证明,每个服务提供商都是独立的。我从代码中删除了所有 .buildServiceProvider,并且正在从 Httpcontext.RequestServices 和 IApplicationBuilder.ApplicationServices 中的 Startup.Configure 方法访问控制器中的框架 sp。
感谢您的帮助。