cork 0.0.1-alpha.6 copy "cork: ^0.0.1-alpha.6" to clipboard
cork: ^0.0.1-alpha.6 copied to clipboard

outdatedDart 1 only

Yet another dependency injection framework for Dart.

cork #

Build Status

Yet another dependency injection framework for Dart, built based on Dagger.

Example:

import 'package:cork/cork.dart';

// "Inject" means that something can be created by an Injector.
@Inject()
class Foo {}

class CustomFooImpl implements Foo {}

// "Module" is a collection of Inject-ables, and other Modules.
// It can also provide custom factory functions.
@Module(const [Foo])
class FooModule {
  // Instead of using the default factory for Foo, use this function.
  @Provide(Foo)
  static Foo getFoo() => new CustomFooImpl();
}

Cork is built with static analysis and tree-shaking in mind, but is currently only a prototype. There are three planned ways to use Cork in your application:

Dynamic mode (using dart:mirrors) #

Suitable for use in the Dart VM (e.g. server-side), or within Dartium only.

import 'package:cork/dynamic.dart';

// Assume same file as above.
import 'foo.dart';

void main() {
  var injector = createInjector(FooModule);
  var foo = injector.get(Foo);
  assert(foo.runtimeType == CustomFooImpl)
}

Simple codegen mode (using hand-written bindings): #

import 'package:cork/cork.dart';

// This is currently *not* recommended, and for experimental use only.
import 'package:cork/src/binding.dart';

import 'foo.dart';

void main() {
  var bindings = [
    new Binding(Foo, new Provider(() => new CustomFooImpl()))
  ];
  
  var injector = new Injector(bindings);
  var foo = injector.get(Foo);
  assert(foo.runtimeType == CustomFooImpl);
}

Simple codegen mode (using the binding generator): #

Experimental: Still in development.

var foo = Uri.parse('package:cork/testing/library/foo.dart');

// The dart file generated.
var generator = new StaticBindingGenerator();
var result = await generator.generate(foo);

Static class mode: #

Experimental: Still in development.

Generates a class called $GeneratedClass:

var foo = Uri.parse('package:cork/testing/library/foo.dart');

// The dart file generated.
var generator = new StaticClassGenerator();
var result = await generator.generate(foo);

The output looks something like this:

import 'package:cork/testing/library/foo.dart' as import_1;

class $GeneratedInjector {
  import_1.Foo _1;
  import_1.Foo get1() {
    if (_1 == null) {
      _1 = new import_1.Foo();
    }
    return _1;
  }
}
0
likes
0
points
22
downloads

Publisher

unverified uploader

Weekly Downloads

Yet another dependency injection framework for Dart.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

analysis, collection, generator

More

Packages that depend on cork