InversionTypeProvider.vala 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using InvercargillSql.Orm;
  2. using Inversion;
  3. namespace InvercargillSqlInversion {
  4. public class InversionTypeProvider : Object, TypeProvider {
  5. private Scope scope = inject<Scope>();
  6. public InvercargillSql.Orm.EntityMapper? get_mapper_for_type (GLib.Type type) throws Error {
  7. print(@"get_mapper_for_type $(type.name())\n");
  8. var reg = scope.get_registrations(typeof(EntityMapper))
  9. .where(r => r.get_metadata<MapperTypeInfo>().any(i => i.mapper_type == type))
  10. .first_or_default();
  11. if(reg == null) {
  12. return null;
  13. }
  14. return (EntityMapper)scope.resolve_registration(reg);
  15. }
  16. public InvercargillSql.Orm.Projections.ProjectionDefinition? get_projection_for_type (GLib.Type type) throws Error {
  17. print(@"get_projection_for_type $(type.name())\n");
  18. var reg = scope.get_registrations(typeof(Projections.ProjectionDefinition))
  19. .where(r => r.get_metadata<MapperTypeInfo>().any(i => i.mapper_type == type))
  20. .first_or_default();
  21. if(reg == null) {
  22. return null;
  23. }
  24. return (Projections.ProjectionDefinition)scope.resolve_registration(reg);
  25. }
  26. public bool has_mapper_for_type (GLib.Type type) {
  27. print(@"has_mapper_for_type $(type.name())\n");
  28. return scope.get_registrations(typeof(EntityMapper))
  29. .any(r => r.get_metadata<MapperTypeInfo>().any(i => i.mapper_type == type));
  30. }
  31. public bool has_projection_for_type (GLib.Type type) {
  32. print(@"has_projection_for_type $(type.name())\n");
  33. return scope.get_registrations(typeof(Projections.ProjectionDefinition))
  34. .any(r => r.get_metadata<MapperTypeInfo>().any(i => i.mapper_type == type));
  35. }
  36. }
  37. public class MapperTypeInfo : Object {
  38. public Type mapper_type { get; set; }
  39. public MapperTypeInfo(Type type) {
  40. mapper_type = type;
  41. }
  42. }
  43. }