protected override object ResolvePerContext(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) { var obj = container.GetPooledObject(keyToResolve); if (obj == null) { obj = container.InvokeFactoryDelegate(factoryDelegate, resolutionPath, keyToResolve); container.objectPool.Add(keyToResolve, obj); } return(obj); }
protected override object ResolvePerContext(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) { var result = ExecuteWithLock(syncRoot, () => container.GetPooledObject(keyToResolve), () => { var obj = container.InvokeFactoryDelegate(factoryDelegate, resolutionPath, keyToResolve); container.objectPool.Add(keyToResolve, obj); return(obj); }, resolutionPath); return(result); }
private object GetPooledObject(RegistrationKey pooledObjectKey) { object obj; if (objectPool.TryGetValue(pooledObjectKey, out obj)) { return(obj); } if (baseContainer != null) { return(baseContainer.GetPooledObject(pooledObjectKey)); } return(null); }
private object GetPooledObject(Type registeredType) { object obj; if (objectPool.TryGetValue(registeredType, out obj)) { return(obj); } if (baseContainer != null) { return(baseContainer.GetPooledObject(registeredType)); } return(null); }
public object Resolve(ObjectContainer container, RegistrationKey keyToResolve, IEnumerable <Type> resolutionPath) { object obj = container.GetPooledObject(ImplementationType); if (obj == null) { if (ImplementationType.IsInterface) { throw new ObjectContainerException("Interface cannot be resolved: " + keyToResolve, resolutionPath); } obj = container.CreateObject(ImplementationType, resolutionPath); container.objectPool.Add(ImplementationType, obj); } return(obj); }
public object Resolve(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) { var pooledObjectKey = new RegistrationKey(implementationType, keyToResolve.Name); object obj = container.GetPooledObject(pooledObjectKey); if (obj == null) { if (implementationType.IsInterface) { throw new ObjectContainerException("Interface cannot be resolved: " + keyToResolve, resolutionPath); } obj = container.CreateObject(implementationType, resolutionPath, keyToResolve); container.objectPool.Add(pooledObjectKey, obj); } return(obj); }
protected override object ResolvePerContext(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) { var typeToConstruct = GetTypeToConstruct(keyToResolve); var pooledObjectKey = new RegistrationKey(typeToConstruct, keyToResolve.Name); object obj = container.GetPooledObject(pooledObjectKey); if (obj == null) { if (typeToConstruct.IsInterface) { throw new ObjectContainerException("Interface cannot be resolved: " + keyToResolve, resolutionPath.ToTypeList()); } obj = container.CreateObject(typeToConstruct, resolutionPath, keyToResolve); container.objectPool.Add(pooledObjectKey, obj); } return(obj); }
protected override object ResolvePerContext(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) { var typeToConstruct = GetTypeToConstruct(keyToResolve); var pooledObjectKey = new RegistrationKey(typeToConstruct, keyToResolve.Name); var result = ExecuteWithLock(syncRoot, () => container.GetPooledObject(pooledObjectKey), () => { if (typeToConstruct.IsInterface) { throw new ObjectContainerException("Interface cannot be resolved: " + keyToResolve, resolutionPath.ToTypeList()); } var obj = container.CreateObject(typeToConstruct, resolutionPath, keyToResolve); container.objectPool.Add(pooledObjectKey, obj); return(obj); }, resolutionPath); return(result); }