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); }
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> >); }