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

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

@ -201,12 +201,17 @@ namespace LightweightIocContainer.Registrations
}
else
{
if (!type.IsAssignableTo(typeof(IDisposable)))
return;
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);
}
}
}
}
}

@ -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<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