diff --git a/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs b/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
index 2a7fa0edf1..73a9bd9198 100644
--- a/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
@@ -21,7 +21,11 @@ namespace BizHawk.Emulation.Common
Type coreType = core.GetType();
- foreach (Type service in coreType.GetInterfaces().Where(t => t != typeof(IEmulatorService)))
+ var services = coreType.GetInterfaces()
+ .Where(t => typeof(IEmulatorService).IsAssignableFrom(t))
+ .Where(t => t != typeof(IEmulatorService));
+
+ foreach (Type service in services)
{
Services.Add(service, core);
}
@@ -40,7 +44,8 @@ namespace BizHawk.Emulation.Common
///
///
///
- public void Register(T provider)
+ public void Register(T provider)
+ where T : IEmulatorService
{
if (provider == null)
throw new ArgumentNullException("provider");
@@ -48,6 +53,7 @@ namespace BizHawk.Emulation.Common
}
public T GetService()
+ where T : IEmulatorService
{
return (T)GetService(typeof(T));
}
@@ -62,6 +68,7 @@ namespace BizHawk.Emulation.Common
}
public bool HasService()
+ where T : IEmulatorService
{
return HasService(typeof(T));
}
diff --git a/BizHawk.Emulation.Common/Interfaces/IEmulatorServiceProvider.cs b/BizHawk.Emulation.Common/Interfaces/IEmulatorServiceProvider.cs
index 14b48d1d6d..1ef4300d67 100644
--- a/BizHawk.Emulation.Common/Interfaces/IEmulatorServiceProvider.cs
+++ b/BizHawk.Emulation.Common/Interfaces/IEmulatorServiceProvider.cs
@@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Common
///
/// Returns whether or not T is available
///
- bool HasService();
+ bool HasService() where T : IEmulatorService;
///
/// Returns whether or not t is available
@@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Common
/// Returns an instance of T if T is available
/// Else returns null
///
- T GetService();
+ T GetService() where T : IEmulatorService;
///
/// Returns an instance of t if t is available