private static object CreateUnavailableImplementation(Type interfaceType, string dynamicTypeName) { object unavailableImpl; // Defines a public sealed class that only implements typeInterface // and for which all methods throw ServiceNotAvailableException. TypeBuilder typeBuilderNotAvailable = _moduleBuilder.DefineType( dynamicTypeName, TypeAttributes.Class | TypeAttributes.Sealed, typeof(object), new Type[] { interfaceType }); MethodInfo mGetTypeFromHandle = typeof(Type).GetMethod("GetTypeFromHandle"); ConstructorInfo cNotAvailableException = typeof(ServiceNotAvailableException).GetConstructor(new[] { typeof(Type) }); foreach (MethodInfo m in ReflectionHelper.GetFlattenMethods(interfaceType)) { Type[] parameters; MethodBuilder mB = ProxyGenerator.CreateInterfaceMethodBuilder(typeBuilderNotAvailable, m, out parameters); ILGenerator g = mB.GetILGenerator(); g.Emit(OpCodes.Ldtoken, interfaceType); g.EmitCall(OpCodes.Call, mGetTypeFromHandle, null); g.Emit(OpCodes.Newobj, cNotAvailableException); g.Emit(OpCodes.Throw); } Type unavailableType = typeBuilderNotAvailable.CreateType(); unavailableImpl = Activator.CreateInstance(unavailableType); return(unavailableImpl); }