Method for IsRegistered to check if a service is already registered

This commit is contained in:
Alexandru Macocian
2021-10-19 12:46:52 +02:00
parent 3d42622c0b
commit 4ce4d7fd5b
5 changed files with 97 additions and 3 deletions
+26
View File
@@ -642,5 +642,31 @@ namespace Slim.Tests
action.Should().Throw<Exception>();
action2.Should().Throw<Exception>();
}
[TestMethod]
public void IsRegisteredReturnsTrueForRegisteredService()
{
var di = new ServiceManager();
di.RegisterSingleton<IIndependentService, IndependentService>();
di.RegisterSingleton(typeof(IDependentService), typeof(DependentService));
var isRegistered1 = di.IsRegistered<IIndependentService>();
var isRegistered2 = di.IsRegistered(typeof(IDependentService));
isRegistered1.Should().BeTrue();
isRegistered2.Should().BeTrue();
}
[TestMethod]
public void IsRegisteredReturnsFalseForNonRegisteredService()
{
var di = new ServiceManager();
var isRegistered1 = di.IsRegistered<IIndependentService>();
var isRegistered2 = di.IsRegistered(typeof(IDependentService));
isRegistered1.Should().BeFalse();
isRegistered2.Should().BeFalse();
}
}
}
+12
View File
@@ -9,6 +9,18 @@ namespace Slim
/// </summary>
public interface IServiceManager : IServiceProvider, IServiceProducer
{
/// <summary>
/// Returns true if there exists a registration for <paramref name="tInterface"/>.
/// </summary>
/// <param name="tInterface">Type of registered service.</param>
/// <returns>True if service <paramref name="tInterface"/> is registered. Otherwise returns false.</returns>
public bool IsRegistered(Type tInterface);
/// <summary>
/// Returns true if there exists a registration for <typeparamref name="T"/>.
/// </summary>
/// <typeparam name="T">Type of registered service.</typeparam>
/// <returns>True if service <typeparamref name="T"/> is registered. Otherwise returns false.</returns>
public bool IsRegistered<T>();
/// <summary>
/// Returns all services that can be cast to provided type.
/// </summary>
+28
View File
@@ -43,6 +43,24 @@ namespace Slim
this.scoped = true;
}
/// <summary>
/// Returns true if there exists a registration for <paramref name="tInterface"/>.
/// </summary>
/// <param name="tInterface">Type of registered service.</param>
/// <returns>True if service <paramref name="tInterface"/> is registered. Otherwise returns false.</returns>
public bool IsRegistered(Type tInterface)
{
return this.IsMapped(tInterface);
}
/// <summary>
/// Returns true if there exists a registration for <typeparamref name="T"/>.
/// </summary>
/// <typeparam name="T">Type of registered service.</typeparam>
/// <returns>True if service <typeparamref name="T"/> is registered. Otherwise returns false.</returns>
public bool IsRegistered<T>()
{
return this.IsMapped(typeof(T));
}
/// <summary>
/// Register a service into <see cref="ServiceManager"/> with <see cref="Lifetime.Transient"/>.
/// </summary>
@@ -565,6 +583,16 @@ namespace Slim
}
});
}
private bool IsMapped(Type tinterface)
{
return this.TryFunc(() =>
{
lock (this)
{
return this.InterfaceMapping.ContainsKey(tinterface);
}
});
}
private object GetObject(Type tInterface)
{
if (!this.InterfaceMapping.TryGetValue(tInterface, out var mappingTuple) &&
+3 -3
View File
@@ -8,10 +8,10 @@
<Company />
<Product></Product>
<Description>Service lifetime management and dependency injection framework.</Description>
<AssemblyVersion>1.5.4</AssemblyVersion>
<FileVersion>1.5.4</FileVersion>
<AssemblyVersion>1.5.5</AssemblyVersion>
<FileVersion>1.5.5</FileVersion>
<PackageProjectUrl>https://github.com/AlexMacocian/Slim</PackageProjectUrl>
<Version>1.5.4</Version>
<Version>1.5.5</Version>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
+28
View File
@@ -39,6 +39,20 @@
Interface for <see cref="T:Slim.ServiceManager"/>.
</summary>
</member>
<member name="M:Slim.IServiceManager.IsRegistered(System.Type)">
<summary>
Returns true if there exists a registration for <paramref name="tInterface"/>.
</summary>
<param name="tInterface">Type of registered service.</param>
<returns>True if service <paramref name="tInterface"/> is registered. Otherwise returns false.</returns>
</member>
<member name="M:Slim.IServiceManager.IsRegistered``1">
<summary>
Returns true if there exists a registration for <typeparamref name="T"/>.
</summary>
<typeparam name="T">Type of registered service.</typeparam>
<returns>True if service <typeparamref name="T"/> is registered. Otherwise returns false.</returns>
</member>
<member name="M:Slim.IServiceManager.GetServicesOfType``1">
<summary>
Returns all services that can be cast to provided type.
@@ -367,6 +381,20 @@
Creates an instance of <see cref="T:Slim.IServiceManager"/>.
</summary>
</member>
<member name="M:Slim.ServiceManager.IsRegistered(System.Type)">
<summary>
Returns true if there exists a registration for <paramref name="tInterface"/>.
</summary>
<param name="tInterface">Type of registered service.</param>
<returns>True if service <paramref name="tInterface"/> is registered. Otherwise returns false.</returns>
</member>
<member name="M:Slim.ServiceManager.IsRegistered``1">
<summary>
Returns true if there exists a registration for <typeparamref name="T"/>.
</summary>
<typeparam name="T">Type of registered service.</typeparam>
<returns>True if service <typeparamref name="T"/> is registered. Otherwise returns false.</returns>
</member>
<member name="M:Slim.ServiceManager.RegisterTransient``2">
<summary>
Register a service into <see cref="T:Slim.ServiceManager"/> with <see cref="F:Slim.Lifetime.Transient"/>.