public static PropertyTreeMetaObject Create(Type componentType) { if (componentType == null) { throw new ArgumentNullException("componentType"); } if (componentType == typeof(Type)) { return(new TypeMetaObject()); } var ct = componentType.GetTypeInfo(); if (ct.IsGenericType && ct.GetGenericTypeDefinition() == typeof(Template <>)) { return(TemplateMetaObject.FromTemplateType(componentType)); } if (componentType == typeof(ITemplate)) { return(new UntypedToTypedMetaObject(typeof(ITemplate), t => TemplateMetaObject.FromInstanceType(null, t.Single()))); } return(new PreactivationMetaObject(componentType)); }
private TemplateMetaObject(TemplateMetaObject parent, Type componentType) : base(parent) { if (componentType.IsGenericType && componentType.GetGenericTypeDefinition() == typeof(ITemplate<>)) throw new ArgumentException(); this.componentType = componentType; }
private TemplateMetaObject(TemplateMetaObject parent, Type componentType) : base(parent) { if (typeof(ITemplate).GetTypeInfo().IsAssignableFrom(componentType)) { // Can't be a "template of a template" throw new ArgumentException(); } this.componentType = componentType; }
public static TemplateMetaObject FromInstanceType(TemplateMetaObject parent, Type componentType) { return(new TemplateMetaObject(parent, componentType)); }
public static TemplateMetaObject FromInstanceType(TemplateMetaObject parent, Type componentType) { return new TemplateMetaObject(parent, componentType); }