All Projects â†’ pbissonho â†’ koin.dart

pbissonho / koin.dart

Licence: Apache-2.0 License
A pragmatic lightweight dependency injection library. This is a port of Koin for Dart projects.

Programming Languages

dart
5743 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to koin.dart

android-clean-architecture
🚀🚀🚀 The boilerplate for Android using Kotlin & Clean architecture.
Stars: ✭ 21 (-58%)
Mutual labels:  dependency-injection, koin
NoMansWallpaperApp
Looking for your next No Man's Sky wallpaper?
Stars: ✭ 35 (-30%)
Mutual labels:  dependency-injection, koin
common-injector
Heavily influenced by Angular and it's dependency injection. Inspired by Angular and Indiv.
Stars: ✭ 18 (-64%)
Mutual labels:  dependency-injection
entrance-decorator
A minimal solution of dependency injection for projects that scale.
Stars: ✭ 25 (-50%)
Mutual labels:  dependency-injection
phpstan-symfony
*DEPRECATED* Symfony extension for PHPStan
Stars: ✭ 42 (-16%)
Mutual labels:  dependency-injection
Jade-Player
A media player for Android.
Stars: ✭ 70 (+40%)
Mutual labels:  koin
dudulina
CQRS + Event Sourcing library for PHP
Stars: ✭ 53 (+6%)
Mutual labels:  dependency-injection
ThunderboltIoc
One of the very first IoC frameworks for .Net that has no reflection. An IoC that casts its services before thunder casts its bolts.
Stars: ✭ 40 (-20%)
Mutual labels:  dependency-injection
refuel
Lightweight dependency injection engine and DI-driven tools.
Stars: ✭ 21 (-58%)
Mutual labels:  dependency-injection
Dazinator.Extensions.DependencyInjection
Useful additions to Microsoft.Extensions.DependencyInjection such as Named Services.
Stars: ✭ 26 (-48%)
Mutual labels:  dependency-injection
Zenject-2019
Dependency Injection Framework for Unity3D
Stars: ✭ 2,567 (+5034%)
Mutual labels:  dependency-injection
EasyDI
Easy Dependency Injection for Java
Stars: ✭ 46 (-8%)
Mutual labels:  dependency-injection
Griffin.Container
Inversion of control container with (almost) zero configuration
Stars: ✭ 13 (-74%)
Mutual labels:  dependency-injection
nodejs-boilerplate
Clean Architecture for node.js projects (Typescript + Express + TypeORM + Typedi)
Stars: ✭ 199 (+298%)
Mutual labels:  dependency-injection
Slice
Slice - a framework which simplifies Sling/AEM development by using dependency injection pattern and mapping Sling resources into Java objects
Stars: ✭ 64 (+28%)
Mutual labels:  dependency-injection
wp-app-container
DI Container and related tools to be used at website level.
Stars: ✭ 27 (-46%)
Mutual labels:  dependency-injection
movie-booking
An example for booking movie seat, combined of Android Data Binding, State Design Pattern and Multibinding + Autofactory. iOS version is: https://github.com/lizhiquan/MovieBooking
Stars: ✭ 80 (+60%)
Mutual labels:  dependency-injection
vanilla-di-manifesto
We love DI, but we don't use any DI libraries. Why?
Stars: ✭ 108 (+116%)
Mutual labels:  dependency-injection
sqrs
🚌SQRS is a JavaScript library for implementing CQRS pattern.
Stars: ✭ 23 (-54%)
Mutual labels:  dependency-injection
react-magnetic-di
Dependency injection and replacement for React components and hooks
Stars: ✭ 103 (+106%)
Mutual labels:  dependency-injection

Koin.dart

Koin.dart

build codecov Star on Github style: effective dart


An pragmatic and flexible lightweight dependency injection library. This is a port of Koin for Dart projects.

Written in pure Dart, using functional resolution only: no code generation, no reflection.

Package Pub
koin pub package
koin_test pub package
koin_flutter pub package
koin_bloc pub package
koin_devtools pub package

Why should I use Koin?

  • Allows to dispose your objects at the moment that you are no longer using them.

  • It does not depend on the Flutter.

    • The core does not depend on Flutter, so it is possible to use it with any Dart application.
  • Define in which scope a variable can be accessed.

    • The koin scope allows you to define in which part of the widget tree a variable will be accessible
  • Integration by default for Bloc library, but it can be easily used with any state management.

  • Koin DevTools to inspect the state of your objects.

    • Inspect the internal state of each object at any time on a Flutter page.
  • Dependencies are instances only when needed.

    • Its class is instant when used for the first time.
    • Koin has a implementation of Lazy by Kotlin to enhance this functionality.
  • It is not invasive.

    • Insert Koin in your project without changing the structure of your widgets.
  • Facilitates dependency injection by constructor

    • Using dependency injection by constructor you decrease the coupling and make the test easier.
    • Makes it easy to know the dependencies of your components. Just look at your class's constructor to identify how dependencies it uses.

Features

  • Modules
  • Scopes
  • Singleton provider(definition)
  • Factory provider(definition)
  • Scoped provider(definition)
  • Support to multiple bindings
  • Support to named provider(definition)
  • Easy testing
  • Lazy inject
  • Logging
  • Support to parameter injection
  • Integration by default for Bloc library
  • DevTools for state inspection

What Koin.dart is not?

It is not a state manager. Koin does not have any type of state management, use koin with any state manager.

Table Of Contents

Roadmap

  • Improve documentation
  • Add more examples
    • Example of use with Redux, Mobx and RxDart.
    • Example with HTTP server frameworks.
  • Create an external DevTools
  • Add logger plugin for logger

Quick Start

Basic Setup

Dart

dependencies:
  koin: ^[version]

Flutter

dependencies:
  koin: ^[version]
  koin_flutter: ^[version]

Declare a Koin module

// Given some classes 
class Bloc {
  final Repository service;

  Bloc(this.service);

  get state => "Hello";
}

class Repository {}

// just declare your providers(definitions)
final myModule = Module()
  // Declare a single provider(definition) for Bloc class
  ..single((s) => Bloc(s.get()))
  // Declare a single provider(definition) for Repository class
  ..single((s) => Repository());

Starting Koin

Use the startKoin() function to start Koin in your application.

In a Dart app:

void main(List<String> args) {
    startKoin((app){
      app.module(myModule);
    });
  }

In an Flutter app:

void main() {
  startKoin((app) {
    app.module(homeModule);
  });
  runApp(MyApp());
}

Injecting dependencies

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    // Get a dependency
    final bloc = get<Bloc>();
    return Container(
      child: Text("${bloc.state()}"),
    );
  }
}

Setup

Dart

dependencies:
koin: ^[version]
# Koin for Unit tests
dev_dependencies:
koin_test: ^[version]

Flutter

dependencies:
  koin: ^[version]
  koin_flutter: ^[version]

# Koin for Unit tests
dev_dependencies:
  koin_test: ^[version]

Flutter + Bloc

dependencies:
  koin: ^[version]
  koin_flutter: ^[version]
  koin_bloc: ^[version]

# Koin for Unit tests
dev_dependencies:
  koin_test: ^[version]

Examples

Basic

An simple example in Flutter. Code: Repository

Counter

A more elaborate example using Bloc library as a state management. Code: Repository

Real World

A application to demonstrate the Koin in a real world application.

Features

  • Log in
  • Sign up
  • Loggout
  • Password reset

Code: Repository

DevTools

Koin DevTools allows you to inspect the internal state of the objects created by the providers(definitions).

Usage

Just insert the KoinDevTools Widget somewhere in your application or use showDevTools.

class Page extends StatefulWidget {
  @override
  _PageState createState() => _PageState();
}

class _PageState extends State<Page> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
     /// Just insert the KoinDevTools
      endDrawer: KoinDevTools(),
      body: IconButton(icon: Text('Shod DevTools'), onPressed: () {
        // Or use this
        showDevTools(context);
      },),
    );
  }
}

Ask a Question?

Reporting issues

Found a bug on a specific feature? Open an issue on Github issues

Contribute

Want to help or share a proposal about Koin? problem on a specific feature?

  • Open an issue to explain the issue you want to solve Open an issue
  • After discussion to validate your ideas, you can open a PR or even a draft PR if the contribution is a big one Current PRs

Maintainers

Credits

Dependencies

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].