private static TypeBuilder createDynamicTypeBuilder(Type type, Type parent, Type[] interfaces) { if (ProxyDict.TryGetValue(type, out var info)) { info.Count++; } else { ProxyDict[type] = info = new ProxyTypeInfo { Count = 1 }; } var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(AssemblyName + type.Name), AssemblyBuilderAccess.Run); var moduleBuilder = assemblyBuilder.DefineDynamicModule(ModuleName + type.Name); return(info.TypeBuilder = moduleBuilder.DefineType(TypeName + type.Name + info.Count, TypeAttributes.Public | TypeAttributes.Class, parent, interfaces)); }
public ProxyTypeInfo CreateClassProxyType(Type classToProxy, MocksRepository repository, MockCreationSettings settings, MockMixin mockMixinImpl) { var pgo = CreateProxyGenerationOptions(classToProxy, settings, mockMixinImpl); var typeInfo = new ProxyTypeInfo { ProxyType = generator.ProxyBuilder.CreateClassProxyType(classToProxy, Type.EmptyTypes, pgo) }; typeInfo.Mixins.Add(typeof(IInterceptor), repository.Interceptor); foreach (var mixin in pgo.MixinData.MixinInterfaces) { typeInfo.Mixins.Add(mixin, pgo.MixinData.GetMixinInstance(mixin)); } return typeInfo; }