using InvercargillSql.Orm; using Inversion; namespace InvercargillSqlInversion { public class InversionTypeProvider : Object, TypeProvider { private Scope scope = inject(); public InvercargillSql.Orm.EntityMapper? get_mapper_for_type (GLib.Type type) throws Error { print(@"get_mapper_for_type $(type.name())\n"); var reg = scope.get_registrations(typeof(EntityMapper)) .where(r => r.get_metadata().any(i => i.mapper_type == type)) .first_or_default(); if(reg == null) { return null; } return (EntityMapper)scope.resolve_registration(reg); } public InvercargillSql.Orm.Projections.ProjectionDefinition? get_projection_for_type (GLib.Type type) throws Error { print(@"get_projection_for_type $(type.name())\n"); var reg = scope.get_registrations(typeof(Projections.ProjectionDefinition)) .where(r => r.get_metadata().any(i => i.mapper_type == type)) .first_or_default(); if(reg == null) { return null; } return (Projections.ProjectionDefinition)scope.resolve_registration(reg); } public bool has_mapper_for_type (GLib.Type type) { print(@"has_mapper_for_type $(type.name())\n"); return scope.get_registrations(typeof(EntityMapper)) .any(r => r.get_metadata().any(i => i.mapper_type == type)); } public bool has_projection_for_type (GLib.Type type) { print(@"has_projection_for_type $(type.name())\n"); return scope.get_registrations(typeof(Projections.ProjectionDefinition)) .any(r => r.get_metadata().any(i => i.mapper_type == type)); } } public class MapperTypeInfo : Object { public Type mapper_type { get; set; } public MapperTypeInfo(Type type) { mapper_type = type; } } }