- add validation for disposeStrategies set for types that aren't disposable

pull/57/head
Simon G 4 years ago
parent 775afe4e45
commit 52b9a4cf11
  1. 15
      LightweightIocContainer/Registrations/RegistrationBase.cs
  2. 24
      Test.LightweightIocContainer/DisposeStrategyTest.cs

@ -201,11 +201,16 @@ namespace LightweightIocContainer.Registrations
} }
else else
{ {
if (!type.IsAssignableTo(typeof(IDisposable))) if (type.IsAssignableTo(typeof(IDisposable)))
return; {
if (DisposeStrategy == DisposeStrategy.None)
if (DisposeStrategy == DisposeStrategy.None) throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle);
throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle); }
else
{
if (DisposeStrategy != DisposeStrategy.None)
throw new InvalidDisposeStrategyException(DisposeStrategy, type, Lifestyle);
}
} }
} }
} }

@ -24,6 +24,12 @@ public class DisposeStrategyTest
public void Dispose() => throw new Exception(); public void Dispose() => throw new Exception();
} }
private class TestNotDisposable
{
}
[Test] [Test]
public void TestValidContainerDisposeStrategySingleton() public void TestValidContainerDisposeStrategySingleton()
{ {
@ -88,4 +94,22 @@ public class DisposeStrategyTest
IocContainer iocContainer = new(); IocContainer iocContainer = new();
Assert.Throws<InvalidDisposeStrategyException>(() => iocContainer.Register(r => r.Add<ITest, Test>().WithDisposeStrategy(DisposeStrategy.Container))); Assert.Throws<InvalidDisposeStrategyException>(() => iocContainer.Register(r => r.Add<ITest, Test>().WithDisposeStrategy(DisposeStrategy.Container)));
} }
[Test]
public void TestNoDisposeStrategyTypeNotDisposableSingleton()
{
IocContainer iocContainer = new();
iocContainer.Register(r => r.Add<TestNotDisposable>(Lifestyle.Singleton));
iocContainer.Resolve<TestNotDisposable>();
Assert.DoesNotThrow(() => iocContainer.Dispose());
}
[Test]
public void TestInvalidDisposeStrategyTypeNotDisposableSingleton()
{
IocContainer iocContainer = new();
Assert.Throws<InvalidDisposeStrategyException>(() => iocContainer.Register(r => r.Add<TestNotDisposable>(Lifestyle.Singleton).WithDisposeStrategy(DisposeStrategy.Container)));
}
} }
Loading…
Cancel
Save