private void CreateChildPlan(Type t1)
            {
                var et1 = typeof(IEnumerable <>).MakeGenericType(t1);
                var p1  = new DynamicMethodBuildPlan((DynamicBuildPlanMethod)
                                                     _resolveMethod.MakeGenericMethod(t1)
                                                     .CreateDelegate(typeof(DynamicBuildPlanMethod)));

                _policies.Set(et1, string.Empty, typeof(IBuildPlanPolicy), p1);
            }
Пример #2
0
        public IBuildPlanPolicy CreatePlan(IBuilderContext context, INamedType buildKey)
        {
            // Make generic factory method for the type
            var typeToBuild   = buildKey.Type.GetTypeInfo().GenericTypeArguments;
            var factoryMethod =
                _factoryMethod.MakeGenericMethod(typeToBuild)
                .CreateDelegate(typeof(DynamicBuildPlanMethod));
            // Create policy
            var creatorPlan = new DynamicMethodBuildPlan((DynamicBuildPlanMethod)factoryMethod);

            // Register BuildPlan policy with the container to optimize performance
            _policies.Set(buildKey.Type, string.Empty, typeof(IBuildPlanPolicy), creatorPlan);

            return(creatorPlan);
        }
            private static void FactoryMethod <TResult>(IBuilderContext context) where TResult : class, new()
            {
                var p1 = new DynamicMethodBuildPlan((DynamicBuildPlanMethod)
                                                    _resolveMethod.MakeGenericMethod(typeof(IConfigureOptions <TResult>))
                                                    .CreateDelegate(typeof(DynamicBuildPlanMethod)));

                var a1 = p1.ExecuteBuildUp(context);

                var p2 = new DynamicMethodBuildPlan((DynamicBuildPlanMethod)
                                                    _resolveMethod.MakeGenericMethod(typeof(IPostConfigureOptions <TResult>))
                                                    .CreateDelegate(typeof(DynamicBuildPlanMethod)));

                var a2 = p2.ExecuteBuildUp(context);



                context.Existing = new OptionsFactory <TResult>(a1 as IEnumerable <IConfigureOptions <TResult> >, a2 as IEnumerable <IPostConfigureOptions <TResult> >);
            }