Exemple #1
0
        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"));
        }
Exemple #2
0
        // 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);
Exemple #3
0
        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"));
        }