modularity_contracts 0.1.0 copy "modularity_contracts: ^0.1.0" to clipboard
modularity_contracts: ^0.1.0 copied to clipboard

Zero-dependency interfaces and contracts for Modularity framework. Defines Binder, Module and other core abstractions.

example/example.dart

import 'package:modularity_contracts/modularity_contracts.dart';

/// A simple module implementation example.
class MyModule extends Module {
  @override
  void binds(Binder binder) {
    // Register a lazy singleton
    binder.singleton<MyService>(() => MyService());

    // Register a factory
    binder.factory<MyHelper>(() => MyHelper());
  }
}

class MyService {
  void doWork() => print('Working...');
}

class MyHelper {
  void help() => print('Helping...');
}

void main() {
  final module = MyModule();
  final binder = _MockBinder();

  // Manually calling binds for example purposes
  module.binds(binder);

  final service = binder.get<MyService>();
  service.doWork();
}

class _MockBinder implements Binder {
  final Map<Type, dynamic> _instances = {};

  @override
  void singleton<T extends Object>(T Function() factory) {
    print('Registered singleton ${T.toString()}');
    _instances[T] = factory();
  }

  @override
  void registerLazySingleton<T extends Object>(T Function() factory) =>
      singleton(factory);

  @override
  void factory<T extends Object>(T Function() factory) {
    print('Registered factory ${T.toString()}');
  }

  @override
  void registerFactory<T extends Object>(T Function() factoryFunc) =>
      factory(factoryFunc); // Fixed: factory() takes no args

  @override
  void registerSingleton<T extends Object>(T instance) {
    print('Registered instance ${T.toString()}');
    _instances[T] = instance;
  }

  @override
  T get<T extends Object>() {
    if (_instances.containsKey(T)) {
      return _instances[T] as T;
    }
    throw Exception('Dependency not found');
  }

  @override
  void addImports(List<Binder> binders) {}

  @override
  bool contains(Type type) => _instances.containsKey(type);

  @override
  T parent<T extends Object>() => throw UnimplementedError();

  @override
  T? tryGet<T extends Object>() => _instances[T] as T?;

  @override
  T? tryParent<T extends Object>() => null;
}
1
likes
160
points
119
downloads

Publisher

unverified uploader

Weekly Downloads

Zero-dependency interfaces and contracts for Modularity framework. Defines Binder, Module and other core abstractions.

Repository (GitHub)
View/report issues

Topics

#dependency-injection #di #interfaces #contracts

Documentation

API reference

License

MIT (license)

More

Packages that depend on modularity_contracts