| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using Inversion;
- /**
- * Basic Usage Example
- *
- * This example demonstrates the fundamental features of the Inversion IoC container:
- * - Registering types with different lifecycles
- * - Resolving dependencies
- * - Using the type-safe resolve methods
- */
- public class BasicUsageExample : Object {
- // Define a simple service interface
- public interface ILogger : Object {
- public abstract void log(string message);
- }
- // Console logger implementation
- public class ConsoleLogger : Object, ILogger {
- public void log(string message) {
- stdout.printf("[LOG] %s\n", message);
- }
- }
- // A service that depends on ILogger
- public class UserService : Object {
- private ILogger logger;
- public UserService(ILogger logger) {
- this.logger = logger;
- }
- public void greet(string name) {
- this.logger.log(@"Hello, $name!");
- }
- }
- public static int main(string[] args) {
- stdout.printf("=== Inversion IoC Basic Usage Example ===\n\n");
- // Create the container
- var container = new Container();
- // Register the logger as a singleton with a factory delegate
- container.register_singleton<ConsoleLogger>((scope) => new ConsoleLogger())
- .as_type(typeof(ILogger));
- stdout.printf("Registered ConsoleLogger as ILogger (Singleton)\n\n");
- // Create a scope
- var scope = container.create_scope();
- // Resolve the logger using type-safe method
- try {
- var logger = scope.resolve<ILogger>();
- logger.log("Logger resolved successfully!");
- // Resolve again to demonstrate singleton behavior
- var logger2 = scope.resolve<ILogger>();
- logger2.log("Second resolution - same instance!");
- // Verify they are the same instance
- if (logger == logger2) {
- stdout.printf("\n✓ Singleton working: Both references point to the same instance\n");
- }
- } catch (Error e) {
- stderr.printf("Error: %s\n", e.message);
- return 1;
- }
- stdout.printf("\n=== Example Complete ===\n");
- return 0;
- }
- }
|