Giter Club home page Giter Club logo

inject's Introduction

A nofrills DI container for Dart that does not use reflection, rather taking advantage of reified generics.

Features

  • support for both sync and async factories
  • support for lazy loading singletons
  • support for keys (ie multiple instances of the same type, de-duped by key)

Usage

import 'package:inject/inject.dart';
import 'package:test/test.dart';

class A {
  final String name;

  A(this.name);
}

class B {
  final A a;

  B(this.a);
}

class C {
  final A a;
  final B b;

  C(this.a, this.b);
}

void main() {
  test('example', () {
    DependencyContainerBuilder containerBuilder = DependencyContainerBuilder()
      ..withSingleton("our-super-secret-api-key", key: "api-key")
      ..withSingleton(5, key: "api-key-expiry-days")
      ..withLazySingleton((container) => A(container.get<String>(key: "api-key")))
      ..withFactory((container) => B(container<A>()))
      ..withFactory((container) => C(container<A>(), container<B>()));

    DependencyContainer container = containerBuilder.build();

    C c1 = container<C>();
    C c2 = container<C>();

    expect(c1 == c2, isFalse);
    expect(c1.b == c2.b, isFalse);
    expect(c1.a == c2.a, isTrue);
    expect(c1.a == c1.b.a, isTrue);
  });
}

inject's People

Contributors

ericnrodriguez avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.