Reputation: 3163
I have a generic type that look like this
public class Entity<T> where T : Entity<T>{ ... }
and I need to dynamically construct the type T. So that it looks like this:
public class MyClass : Entity<MyClass>{ ... }
Can this be done ?
Upvotes: 5
Views: 606
Reputation: 11190
AssemblyName assemblyName = new AssemblyName("TestAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public);
Type entityType = typeof(Entity<>).MakeGenericType(typeBuilder);
typeBuilder.SetParent(entityType);
Type t = typeBuilder.CreateType();
Upvotes: 6