private RegisterInstance ( |
||
serviceType | Type of the service. | |
instance | object | The specific instance to register. |
tag | object | The tag to register the service with. The default value is |
originalContainer | object | The original container where the instance was found in. |
return | void |
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);
}
ServiceLocator::RegisterInstance ( |
public void Constructor_InjectedServiceLocator() { var serviceLocator = new ServiceLocator(); var messageService = new MessageService(); serviceLocator.RegisterInstance<IMessageService>(messageService); var navigationService = new NavigationService(); serviceLocator.RegisterInstance<INavigationService>(navigationService); var viewModel = new TestViewModel(serviceLocator); Assert.AreEqual(messageService, viewModel.GetService<IMessageService>()); Assert.IsTrue(ReferenceEquals(messageService, viewModel.GetService<IMessageService>())); Assert.AreEqual(navigationService, viewModel.GetService<INavigationService>()); Assert.IsTrue(ReferenceEquals(navigationService, viewModel.GetService<INavigationService>())); }