/// <summary> /// Registers a specific instance of an service. /// </summary> /// <param name="serviceType">Type of the service.</param> /// <param name="instance">The specific instance to register.</param> /// <param name="tag">The tag to register the service with. The default value is <c>null</c>.</param> /// <param name="originalContainer">The original container where the instance was found in.</param> /// <exception cref="ArgumentNullException">The <paramref name="serviceType"/> is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">The <paramref name="instance"/> is <c>null</c>.</exception> 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 (this) { 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); }
/// <summary> /// Registers a specific instance of an service. /// </summary> /// <param name="serviceType">Type of the service.</param> /// <param name="instance">The specific instance to register.</param> /// <param name="tag">The tag to register the service with. The default value is <c>null</c>.</param> /// <param name="originalContainer">The original container where the instance was found in.</param> /// <exception cref="ArgumentNullException">The <paramref name="serviceType"/> is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">The <paramref name="instance"/> is <c>null</c>.</exception> internal 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); if (originalContainer == null) { originalContainer = this; } var registeredTypeInfo = new RegisteredTypeInfo(serviceType, instance.GetType(), tag, RegistrationType.Singleton, originalContainer); lock (_syncObject) { var serviceInfo = new ServiceInfo(serviceType, tag); _registeredInstances[serviceInfo] = new RegisteredInstanceInfo(serviceType, instance, RegistrationType.Singleton, tag, originalContainer); _registeredTypes[serviceInfo] = registeredTypeInfo; if (AutomaticallyKeepContainersSynchronized) { ExportToExternalContainers(); } } 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); }