Spry.vala 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Inversion;
  2. using Astralis;
  3. namespace Spry {
  4. public class SpryModule : Object, Module {
  5. public void register_components (Container container) throws Error {
  6. container.register_singleton<PathProvider>();
  7. container.register_startup<CryptographyProvider>();
  8. container.register_startup<ComponentContextService>();
  9. container.register_scoped<ComponentFactory>();
  10. container.register_scoped<Authorisation.AuthorisationService>();
  11. container.register_scoped<Authorisation.AuthorisationPipelineComponent>()
  12. .as<PipelineComponent>();
  13. container.register_startup<ContinuationProvider>()
  14. .as<Endpoint>()
  15. .with_metadata<EndpointRoute>(new EndpointRoute("/_spry/cnu/{token}"));
  16. container.register_startup<StaticResourceProvider>()
  17. .as<Endpoint>()
  18. .with_metadata<EndpointRoute>(new EndpointRoute("/_spry/res/{resource}"));
  19. container.register_scoped<ComponentEndpoint>()
  20. .as<Endpoint>()
  21. .with_metadata<EndpointRoute>(new EndpointRoute("/_spry/com/{component-id}/{action}"))
  22. .with_metadata<EndpointRoute>(new EndpointRoute("/_spry/com/{component-id}/{action}/{context}"));
  23. container.register_startup<Static.HtmxResource>()
  24. .as<Spry.StaticResource>();
  25. container.register_startup<Static.HtmxSseResource>()
  26. .as<Spry.StaticResource>();
  27. }
  28. }
  29. public class SpryConfigurator : Object {
  30. private Container container = inject<Container>();
  31. public void add_template<T>(string prefix) {
  32. container.register_transient<T>()
  33. .as<PageTemplate> ()
  34. .with_metadata<TemplateRoutePrefix>(new TemplateRoutePrefix(prefix));
  35. }
  36. public void add_page<T>(EndpointRoute route) {
  37. container.register_scoped<T>()
  38. .as<Endpoint>()
  39. .with_metadata<EndpointRoute>(route);
  40. }
  41. public void add_resource<T>() {
  42. container.register_startup<T>()
  43. .as<Spry.StaticResource>();
  44. }
  45. public void add_component<T>() {
  46. container.register_transient<T>();
  47. }
  48. }
  49. }