static partial void CompileToMethod(Expression<CompiledFactory> factoryExpression, ref CompiledFactory resultFactory) { resultFactory.ThrowIf(resultFactory != null); var typeName = "Factory" + Interlocked.Increment(ref _typeId); var typeBuilder = GetDynamicAssemblyModuleBuilder().DefineType(typeName, TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Abstract); var methodBuilder = typeBuilder.DefineMethod("GetService", MethodAttributes.Public | MethodAttributes.Static, typeof(object), new[] { typeof(object[]), typeof(Scope) }); factoryExpression.CompileToMethod(methodBuilder); var dynamicType = typeBuilder.CreateType(); resultFactory = (CompiledFactory)Delegate.CreateDelegate(typeof(CompiledFactory), dynamicType.GetMethod("GetService")); }
// Partial method definition to be implemented in .NET40 version of Container. // It is optional and fine to be not implemented. partial static void CompileToMethod(Expression<CompiledFactory> factoryExpression, ref CompiledFactory resultFactory);
static partial void CompileToMethod(Expression <CompiledFactory> factoryExpression, ref CompiledFactory resultFactory) { resultFactory.ThrowIf(resultFactory != null); Interlocked.CompareExchange(ref _moduleBuilder, DefineDynamicModuleBuilder(), null); var typeName = "Factory" + Interlocked.Increment(ref TypeId); var typeBuilder = _moduleBuilder.DefineType(typeName, TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Abstract); var methodBuilder = typeBuilder.DefineMethod("GetService", MethodAttributes.Public | MethodAttributes.Static, typeof(object), new[] { typeof(object[]), typeof(Scope) }); factoryExpression.CompileToMethod(methodBuilder); var dynamicType = typeBuilder.CreateType(); resultFactory = (CompiledFactory)Delegate.CreateDelegate(typeof(CompiledFactory), dynamicType.GetMethod("GetService")); }