|
|
|
|
@@ -24,8 +24,9 @@ public class ServiceContainer {
|
|
|
|
|
/// <typeparam name="TInterface">Interface the service is implementing</typeparam>
|
|
|
|
|
/// <typeparam name="TImplementation">Implementation type of the service</typeparam>
|
|
|
|
|
public ServiceContainer AddSingleton<TInterface, TImplementation>()
|
|
|
|
|
where TInterface : class
|
|
|
|
|
where TImplementation : class, TInterface {
|
|
|
|
|
descriptors.Add(new ServiceDescriptor {
|
|
|
|
|
descriptors.Add(new () {
|
|
|
|
|
ServiceType = typeof(TInterface),
|
|
|
|
|
ImplementationType = typeof(TImplementation),
|
|
|
|
|
Lifetime = ServiceLifetime.Lifetime
|
|
|
|
|
@@ -33,14 +34,29 @@ public class ServiceContainer {
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers a singleton service where the service type is the same as the implementation type.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="TClass">Class type of the service</typeparam>
|
|
|
|
|
public ServiceContainer AddSingleton<TClass>()
|
|
|
|
|
where TClass : class {
|
|
|
|
|
descriptors.Add(new () {
|
|
|
|
|
ServiceType = typeof(TClass),
|
|
|
|
|
ImplementationType = typeof(TClass),
|
|
|
|
|
Lifetime = ServiceLifetime.Lifetime
|
|
|
|
|
});
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers a transient service with its implementation.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="TInterface">Interface the service is implementing</typeparam>
|
|
|
|
|
/// <typeparam name="TImplementation">Implementation type of the service</typeparam>
|
|
|
|
|
public ServiceContainer AddTransient<TInterface, TImplementation>()
|
|
|
|
|
where TInterface : class
|
|
|
|
|
where TImplementation : class, TInterface {
|
|
|
|
|
descriptors.Add(new ServiceDescriptor {
|
|
|
|
|
descriptors.Add(new () {
|
|
|
|
|
ServiceType = typeof(TInterface),
|
|
|
|
|
ImplementationType = typeof(TImplementation),
|
|
|
|
|
Lifetime = ServiceLifetime.Transient
|
|
|
|
|
@@ -48,6 +64,20 @@ public class ServiceContainer {
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers a transient service where the service type is the same as the implementation type.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="TClass">Class type of the service</typeparam>
|
|
|
|
|
public ServiceContainer AddTransient<TClass>()
|
|
|
|
|
where TClass : class {
|
|
|
|
|
descriptors.Add(new () {
|
|
|
|
|
ServiceType = typeof(TClass),
|
|
|
|
|
ImplementationType = typeof(TClass),
|
|
|
|
|
Lifetime = ServiceLifetime.Transient
|
|
|
|
|
});
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// you can't call generic methods with an unknown type at compile time
|
|
|
|
|
// so we use reflection to call the generic GetService<T> method with the provided type
|
|
|
|
|
// Basically we build the method GetService<serviceType>() at runtime and then call it.
|
|
|
|
|
|