public object ResolveType(Type serviceType, object tag = null)
{
Argument.IsNotNull("serviceType", serviceType);
lock (_lockObject)
{
var isTypeRegistered = IsTypeRegistered(serviceType, tag);
if (!isTypeRegistered)
{
if (CanResolveNonAbstractTypesWithoutRegistration && serviceType.IsClassEx() && !serviceType.IsAbstractEx())
{
return _typeFactory.CreateInstance(serviceType);
}
ThrowTypeNotRegisteredException(serviceType);
}
var serviceInfo = new ServiceInfo(serviceType, tag);
if (_registeredInstances.ContainsKey(serviceInfo))
{
return _registeredInstances[serviceInfo].ImplementingInstance;
}
// If a type is registered, the original container is always known
return ResolveTypeFromKnownContainer(serviceType, tag);
}
}