BasicUsage.vala 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Inversion;
  2. /**
  3. * Basic Usage Example
  4. *
  5. * This example demonstrates the fundamental features of the Inversion IoC container:
  6. * - Registering types with different lifecycles
  7. * - Resolving dependencies
  8. * - Using the type-safe resolve methods
  9. */
  10. public class BasicUsageExample : Object {
  11. // Define a simple service interface
  12. public interface ILogger : Object {
  13. public abstract void log(string message);
  14. }
  15. // Console logger implementation
  16. public class ConsoleLogger : Object, ILogger {
  17. public void log(string message) {
  18. stdout.printf("[LOG] %s\n", message);
  19. }
  20. }
  21. // A service that depends on ILogger
  22. public class UserService : Object {
  23. private ILogger logger;
  24. public UserService(ILogger logger) {
  25. this.logger = logger;
  26. }
  27. public void greet(string name) {
  28. this.logger.log(@"Hello, $name!");
  29. }
  30. }
  31. public static int main(string[] args) {
  32. stdout.printf("=== Inversion IoC Basic Usage Example ===\n\n");
  33. // Create the container
  34. var container = new Container();
  35. // Register the logger as a singleton with a factory delegate
  36. container.register_singleton<ConsoleLogger>((scope) => new ConsoleLogger())
  37. .as_type(typeof(ILogger));
  38. stdout.printf("Registered ConsoleLogger as ILogger (Singleton)\n\n");
  39. // Create a scope
  40. var scope = container.create_scope();
  41. // Resolve the logger using type-safe method
  42. try {
  43. var logger = scope.resolve<ILogger>();
  44. logger.log("Logger resolved successfully!");
  45. // Resolve again to demonstrate singleton behavior
  46. var logger2 = scope.resolve<ILogger>();
  47. logger2.log("Second resolution - same instance!");
  48. // Verify they are the same instance
  49. if (logger == logger2) {
  50. stdout.printf("\n✓ Singleton working: Both references point to the same instance\n");
  51. }
  52. } catch (Error e) {
  53. stderr.printf("Error: %s\n", e.message);
  54. return 1;
  55. }
  56. stdout.printf("\n=== Example Complete ===\n");
  57. return 0;
  58. }
  59. }