public void CanAddCustomCode() { var customCode = @"public void RunThings() { var y = 0; var a = 1; a = y + 10; }"; var options = new TypeToTypeWrapperOptions() { CustomCodeGenerator = (wrapperOptions, type) => customCode }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.RunThings(); }
public void CanWrapGeneratedType() { var code = @"namespace MyTest { public class MyClass { public void RunThings() { var y = 0; var a = 1; a = y + 10; } }}"; var generator = new CodeToAssemblyGenerator(); var assembly = generator.GenerateAssembly(code); var type = assembly.GetExportedTypes().Single(); var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(type, new TypeToTypeWrapperOptions() { IncludedProperties = new List <string>() { "*" }, TypeName = "WrappedType", AdditionalNamespaces = new List <string>() { type.Namespace }, AssemblyGenerator = generator }); dynamic inst = Activator.CreateInstance(result); inst.RunThings(); }
public void CanRunCodeAfterMethodExecution() { var options = new TypeToTypeWrapperOptions() { OnBeforeMethod = (wrapperOptions, type, inst, mi) => { ((TestClass)inst).AddCount(8); } }; var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass), options); dynamic instance = Activator.CreateInstance(result); instance.Run(); instance.Run(); var instanceCount = instance.GetCount(); Assert.Equal(24, instanceCount); }
public void ByDefaultEachInstanceIsTransient() { var wrapper = new TypeToTypeWrapper(); var result = wrapper.CreateType(typeof(TestClass)); dynamic instance = Activator.CreateInstance(result); dynamic instance2 = Activator.CreateInstance(result); instance.AddCount(); instance.AddCount(); instance2.AddCount(); instance2.AddCount(); instance2.AddCount(); var instanceCount = instance.GetCount(); Assert.Equal(2, instanceCount); var instance2Count = instance2.GetCount(); Assert.Equal(3, instance2Count); }