6 namespace SiliconStudio.Core
18 return (T)registry.GetService(typeof(T));
30 var serviceFound = (T)registry.GetService(typeof(T));
31 if (Equals(serviceFound,
default(T)))
46 public static void GetServiceLate<T>(
this IServiceRegistry registry, Action<T> serviceReady)
48 var instance = GetServiceAs<T>(registry);
49 if (Equals(instance, null))
51 var deferred =
new ServiceDeferredRegister<T>(registry, serviceReady);
56 serviceReady(instance);
60 private class ServiceDeferredRegister<T>
63 private readonly Action<T> serviceReady;
65 public ServiceDeferredRegister(
IServiceRegistry registry, Action<T> serviceReady)
68 this.serviceReady = serviceReady;
71 public void Register()
73 services.ServiceAdded += Services_ServiceAdded;
76 void Services_ServiceAdded(
object sender, ServiceEventArgs args)
78 if (args.ServiceType == typeof(T))
80 serviceReady((T)args.Instance);
81 services.ServiceAdded -= Services_ServiceAdded;
A service registry is a IServiceProvider that provides methods to register and unregister services...