private void RegisterInstance(Type serviceType, object instance, object tag, object originalContainer)
{
Argument.IsNotNull("serviceType", serviceType);
Argument.IsNotNull("instance", instance);
Log.Debug("Registering type '{0}' to instance of type '{1}'", serviceType.FullName, instance.GetType().FullName);
var registeredTypeInfo = new ServiceLocatorRegistration(serviceType, instance.GetType(), tag, RegistrationType.Singleton, x => instance);
lock (_lockObject)
{
var serviceInfo = new ServiceInfo(serviceType, tag);
if (_registeredTypes.ContainsKey(serviceInfo))
{
// Re-use previous subscription
registeredTypeInfo = _registeredTypes[serviceInfo];
}
else
{
_registeredTypes[serviceInfo] = registeredTypeInfo;
}
_registeredInstances[serviceInfo] = new RegisteredInstanceInfo(registeredTypeInfo, instance);
}
TypeRegistered.SafeInvoke(this, () => new TypeRegisteredEventArgs(registeredTypeInfo.DeclaringType, registeredTypeInfo.ImplementingType, tag, RegistrationType.Singleton));
Log.Debug("Registered type '{0}' to instance of type '{1}'", serviceType.FullName, instance.GetType().FullName);
}