24 using System.Collections.Generic;
25 using System.Reflection;
26 using SiliconStudio.Core.Reflection;
29 namespace SiliconStudio.Core
38 private readonly Dictionary<Type, object> registeredService =
new Dictionary<Type, object>();
40 #region IServiceRegistry Members
51 throw new ArgumentNullException(
"type");
53 lock (registeredService)
55 if (registeredService.ContainsKey(type))
56 return registeredService[type];
76 throw new ArgumentNullException(
"type");
79 throw new ArgumentNullException(
"provider");
81 if (!type.GetTypeInfo().IsAssignableFrom(provider.GetType().GetTypeInfo()))
82 throw new ArgumentException(String.Format(
"Service [{0}] must be assignable to [{1}]", provider.GetType().FullName, type.GetType().FullName));
84 lock (registeredService)
86 if (registeredService.ContainsKey(type))
87 throw new ArgumentException(
"Service is already registered",
"type");
88 registeredService.Add(type, provider);
98 throw new ArgumentNullException(
"type");
100 object oldService = null;
101 lock (registeredService)
103 if (registeredService.TryGetValue(type, out oldService))
104 registeredService.Remove(type);
106 if (oldService != null)
114 EventHandler<ServiceEventArgs> handler = ServiceAdded;
115 if (handler != null) handler(
this, e);
118 private void OnServiceRemoved(ServiceEventArgs e)
120 EventHandler<ServiceEventArgs> handler = ServiceRemoved;
121 if (handler != null) handler(
this, e);
A service registry is a IServiceProvider that provides methods to register and unregister services...
void AddService(Type type, object provider)
Adds a service to this ServiceRegistry.
EventHandler< ServiceEventArgs > ServiceRemoved
void RemoveService(Type type)
Removes the object providing a specified service.
Base implementation for IServiceRegistry
EventHandler< ServiceEventArgs > ServiceAdded
A class that represents a tag propety.
object GetService(Type type)
Gets the instance service providing a specified service.