- add boxing for simple datatypes in factory creation

- add test for factories with simple datatypes as parameters
pull/32/head
Simon Gockner 6 years ago
parent 69104a6e14
commit cb4ea88597
  1. 1
      LightweightIocContainer/Registrations/TypedFactoryRegistration.cs
  2. 24
      Test.LightweightIocContainer/IocContainerTest.cs

@ -118,6 +118,7 @@ namespace LightweightIocContainer.Registrations
generator.Emit(OpCodes.Dup);
generator.Emit(OpCodes.Ldc_I4_S, i);
generator.Emit(OpCodes.Ldarg_S, i + 1);
generator.Emit(OpCodes.Box, args[i].ParameterType); //Boxing is only needed for simple datatypes, but for now it is not a problem to box everything
generator.Emit(OpCodes.Stelem_Ref);
}
}

@ -26,6 +26,7 @@ namespace Test.LightweightIocContainer
ITest Create(string name);
ITest Create(MultitonScope scope);
ITest CreateTest(string name = null);
ITest Create(byte id);
void ClearMultitonInstance<T>();
}
@ -61,6 +62,17 @@ namespace Test.LightweightIocContainer
}
}
[UsedImplicitly]
private class TestByte : ITest
{
private readonly byte _id;
public TestByte(byte id)
{
_id = id;
}
}
public class MultitonScope
{
@ -346,6 +358,18 @@ namespace Test.LightweightIocContainer
Assert.IsInstanceOf<TestConstructor>(createdTest);
}
[Test]
public void TestResolveFromFactoryWithByte()
{
_iocContainer.Register<ITest, TestByte>();
_iocContainer.RegisterFactory<ITestFactory>();
ITestFactory testFactory = _iocContainer.Resolve<ITestFactory>();
ITest createdTest = testFactory.Create(1);
Assert.IsInstanceOf<TestByte>(createdTest);
}
[Test]
public void TestResolveMultitonFromFactory()
{

Loading…
Cancel
Save