diff --git a/Syrette/ServiceContainer.cs b/Syrette/ServiceContainer.cs
index 8115381..06cc528 100644
--- a/Syrette/ServiceContainer.cs
+++ b/Syrette/ServiceContainer.cs
@@ -92,12 +92,12 @@ public class ServiceContainer {
///
/// Resolves and returns an instance of the requested service type.
///
- /// Interface type of the service being requested
+ /// Interface type of the service being requested
/// Resolved service instance
- public TInterface GetService() {
- var descriptor = descriptors.FirstOrDefault(d => d.ServiceType == typeof(TInterface));
+ public TService GetService() {
+ var descriptor = descriptors.FirstOrDefault(d => d.ServiceType == typeof(TService) || d.ImplementationType == typeof(TService));
- if (descriptor == null) throw new Exception($"Service of type {typeof(TInterface)} not registered.");
+ if (descriptor == null) throw new Exception($"Service of type {typeof(TService)} not registered.");
var ctors = descriptor.ImplementationType.GetConstructors();
int max = -1;
@@ -115,19 +115,19 @@ public class ServiceContainer {
}
}
if (bestCtor == null)
- throw new Exception($"Cannot create service of type {typeof(TInterface)}. No suitable constructor found.");
+ throw new Exception($"Cannot create service of type {typeof(TService)}. No suitable constructor found.");
// Transient: create a new instance each time
if (descriptor.Lifetime != ServiceLifetime.Lifetime) {
- var service = Instantiate(descriptor, bestCtor);
+ var service = Instantiate(descriptor, bestCtor);
return service;
}
// Singleton: return existing instance
- if (singletons.TryGetValue(descriptor.ServiceType, out object? singleton)) return (TInterface)singleton;
+ if (singletons.TryGetValue(descriptor.ServiceType, out object? singleton)) return (TService)singleton;
// or create a new one if not yet created.
- var newSingleton = Instantiate(descriptor);
+ var newSingleton = Instantiate(descriptor);
singletons[descriptor.ServiceType] = newSingleton!;
return newSingleton;
}