instancer 1.0.0 copy "instancer: ^1.0.0" to clipboard
instancer: ^1.0.0 copied to clipboard

A simple factory-based instance creator for Dart.

example/example.dart

import 'package:instancer/instancer.dart';

// Example 1: Simple class registration
class Product {
  final String name;
  final double price;

  Product({required this.name, required this.price});

  @override
  String toString() => '$name: \$$price';
}

// Example 2: Class with dependencies
class ShoppingCart {
  final List<Product> items = [];

  void addItem(Product product) {
    items.add(product);
  }

  double get total => items.fold(0, (sum, item) => sum + item.price);

  @override
  String toString() => 'Cart with ${items.length} items, total: \$$total';
}

// Example 3: Configuration class
class AppConfig {
  final String apiUrl;
  final bool debugMode;

  AppConfig({required this.apiUrl, required this.debugMode});

  @override
  String toString() => 'Config: $apiUrl (debug: $debugMode)';
}

void main() {
  print('=== Instancer Examples ===\n');

  // Example 1: Register a simple factory
  print('1. Simple Product Factory:');
  Instancer.register<Product>(() => Product(name: 'Widget', price: 9.99));

  final product1 = Instancer.create<Product>();
  final product2 = Instancer.create<Product>();
  print('  Product 1: $product1');
  print('  Product 2: $product2');
  print('  Same instance? ${identical(product1, product2)}\n');

  // Example 2: Register with different configurations
  print('2. Different Configurations:');

  // Development config
  Instancer.register<AppConfig>(
    () => AppConfig(apiUrl: 'http://localhost:3000', debugMode: true),
  );
  print('  Dev Config: ${Instancer.create<AppConfig>()}');

  // Switch to production config
  Instancer.register<AppConfig>(
    () => AppConfig(apiUrl: 'https://api.production.com', debugMode: false),
  );
  print('  Prod Config: ${Instancer.create<AppConfig>()}\n');

  // Example 3: Complex object creation
  print('3. Shopping Cart with Products:');
  Instancer.register<ShoppingCart>(() {
    final cart = ShoppingCart();
    cart.addItem(Product(name: 'Book', price: 15.99));
    cart.addItem(Product(name: 'Pen', price: 2.50));
    return cart;
  });

  final cart = Instancer.create<ShoppingCart>();
  print('  $cart\n');

  // Example 4: Check registration status
  print('4. Registry Status:');
  print('  Product registered? ${Instancer.isRegistered<Product>()}');
  print('  Total factories: ${Instancer.count}');

  Instancer.unregister<Product>();
  print('  After unregister Product: ${Instancer.isRegistered<Product>()}');
  print('  Total factories: ${Instancer.count}\n');

  // Example 5: Using with counter/state
  print('5. Counter with State:');
  var counter = 0;
  Instancer.register<int>(() => counter++);

  print('  First call: ${Instancer.create<int>()}');
  print('  Second call: ${Instancer.create<int>()}');
  print('  Third call: ${Instancer.create<int>()}\n');

  // Clean up
  print('6. Cleanup:');
  print('  Factories before clear: ${Instancer.count}');
  Instancer.clear();
  print('  Factories after clear: ${Instancer.count}');
}
10
likes
150
points
119
downloads

Publisher

verified publisherfinchdart.com

Weekly Downloads

A simple factory-based instance creator for Dart.

Homepage
Repository (GitHub)
View/report issues
Contributing

Topics

#dart #factory #instance #clone

Documentation

API reference

Funding

Consider supporting this project:

github.com

License

MIT (license)

More

Packages that depend on instancer