instancer 1.0.0
instancer: ^1.0.0 copied to clipboard
A simple factory-based instance creator for 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}');
}