diff --git a/LightweightIocContainer/Registrations/RegistrationBase.cs b/LightweightIocContainer/Registrations/RegistrationBase.cs index ab53eb1..ca5b45a 100644 --- a/LightweightIocContainer/Registrations/RegistrationBase.cs +++ b/LightweightIocContainer/Registrations/RegistrationBase.cs @@ -201,11 +201,16 @@ namespace LightweightIocContainer.Registrations } else { - if (!type.IsAssignableTo(typeof(IDisposable))) - return; - - if (DisposeStrategy == DisposeStrategy.None) - throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle); + if (type.IsAssignableTo(typeof(IDisposable))) + { + if (DisposeStrategy == DisposeStrategy.None) + throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle); + } + else + { + if (DisposeStrategy != DisposeStrategy.None) + throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle); + } } } } diff --git a/Test.LightweightIocContainer/DisposeStrategyTest.cs b/Test.LightweightIocContainer/DisposeStrategyTest.cs index 7f2cdb9..9c29290 100644 --- a/Test.LightweightIocContainer/DisposeStrategyTest.cs +++ b/Test.LightweightIocContainer/DisposeStrategyTest.cs @@ -24,6 +24,12 @@ public class DisposeStrategyTest public void Dispose() => throw new Exception(); } + private class TestNotDisposable + { + + } + + [Test] public void TestValidContainerDisposeStrategySingleton() { @@ -88,4 +94,22 @@ public class DisposeStrategyTest IocContainer iocContainer = new(); Assert.Throws(() => iocContainer.Register(r => r.Add().WithDisposeStrategy(DisposeStrategy.Container))); } + + [Test] + public void TestNoDisposeStrategyTypeNotDisposableSingleton() + { + IocContainer iocContainer = new(); + iocContainer.Register(r => r.Add(Lifestyle.Singleton)); + + iocContainer.Resolve(); + + Assert.DoesNotThrow(() => iocContainer.Dispose()); + } + + [Test] + public void TestInvalidDisposeStrategyTypeNotDisposableSingleton() + { + IocContainer iocContainer = new(); + Assert.Throws(() => iocContainer.Register(r => r.Add(Lifestyle.Singleton).WithDisposeStrategy(DisposeStrategy.Container))); + } } \ No newline at end of file