/// <summary> /// 获取域单例对象 /// </summary> /// <param name="serviceProvider"></param> /// <param name="record"></param> /// <returns></returns> internal object GetScoped(IServiceProvider serviceProvider, TypeRecord record) { var key = string.Empty; if (record.BuildFlag) { key = serviceProvider.GetScopedID() + record.ID; } else { key = GenerateTempKey(serviceProvider, record, record.ImplementationType); } if (scopedKeys.Contains(key) == false) { var obj = record.GetObject(serviceProvider); scopedKeys.Add(key); this.objects.Add(new ObjectContainer(obj, record.Lifetime, serviceProvider.GetScope())); if (scoped.TryAdd(key, obj)) { return(obj); } else { scoped.TryGetValue(key, out obj); return(obj); } } else { if (scoped.TryGetValue(key, out var obj)) { return(obj); } else { return(null); } } }