cwb-inject
v1.0.10
Published
Dependency injection library implemented with no dependencies
Downloads
2
Maintainers
Readme
Important Notice!
I have moved this package to live under the organization @codingworkbench (which is what the prefix cwb was for). You can find the new package at @codingworkbench/inject.
Once you install the new package, you can simply change your import statements from
import CwbInject from "cwb-inject";
to
import CwbInject from "@codingworkbench/inject";
cwb-inject
Lightweight dependency inject module for Typescript that has no dependencies.
Install
npm install cwb-inject --save
Basic Usage
import CwbInject from "cwb-inject"
// Application domain interfaces and implementations
interface ITodoService {}
class TodoServiceImpl implements ITodoService {}
// Describe the module dependencies
interface ITodoModule {
todoService: ITodoService;
}
// Create a module for the application domain
const todoModule = new CwbInject.Module<ITodoModule>();
// Bind the todoService property to the TodoService constructor
todoModule.bind("todoService", TodoServiceImpl);
// Request the todoService property and use as needed
const todoService = todoModule.getProperty("todoService");
Factory Functions
// Bind a function to the todoService property
todoModule.bindFactoryFunction("todoService", async () => new TodoService());
Injecting Dependencies
TodoStore.ts
export interface ITodoStore {}
export class TodoStoreImpl implements ITodoStore {}
TodoService.ts
import {ITodoStore} from "./TodoStore"
export interface ITodoService {}
export interface ITodoServiceArgs {
todoStore: ITodoStore;
}
export class TodoServiceImpl implements ITodoService {
private store: ITodoStore;
constructor(args: ITodoServiceArgs) {
this.store = args.todoStore;
}
}
inject.ts
import CwbInject from "cwb-inject"
import {ITodoStore} from "./TodoStore"
import {ITodoService, ITodoServiceArgs} from "./TodoService"
export interface ITodoModule {
todoStore: ITodoStore;
todoService: ITodoService;
}
const todoServiceInjectionProperties: CwbInject.InjectionProperties<ITodoServiceArgs> = {
todoStore: true,
};
export todoServiceInjectionProperties;
main.ts
import CwbInject from "cwb-inject"
import {TodoStoreImpl} from "./TodoStore"
import {TodoServiceImpl} from "./TodoService"
import {todoServiceInjectionProperties, ITodoModule} from "./inject"
// Create a module for the application domain
const todoModule = new CwbInject.Module<ITodoModule>();
// bind the store object
todoModule.bind("todoStore", TodoStoreImpl);
// Bind the todoService property to the TodoService constructor
todoModule.bind("todoService", TodoServiceImpl, todoServiceInjectionProperties);
// or
// todoModule.bindFactoryFunction("todoService", async (args) => new TodoServiceImpl(args), todoServiceInjectionProperties);
// Request the todoService property and use as needed
const todoService = todoModule.getProperty("todoService");
API
class Module <MC>
An object provider that lazy constructs object as they are requested. Modules can be combined to create more complex models.
- MC: (Template) Interface type that has all the properties that can be required by the module to construct.
methods
getProperty( propertyKey ): this propertyKey (keyof MC) : Request the value for the given property.
bind( propertyKey, constructor [, injectionProperties ] ): this propertyKey (keyof MC) : A key that had is part of the module type MC. constructor (Constructor): Reference to a constructor that should be called when populating the property. injectionProperties (InjectionKeys): The properties that should be injected into the constructor. Bind a class constructor to a property. The constructor will be called when getProperty(propertyKey) is invoked.
bindFactoryFunction( propertyKey, factoryFunction [, injectionProperties ] ): this propertyKey (keyof MC): A key that had is part of the module type MC. factoryFunction (function (args) : Promise<R>) : A function that returns a new object. If injectionProperties is set then the properties values will be passed to this function call. injectionProperties (InjectionKeys): The properties that should be passed into the factoryFunction. Bind a factory function to a property. The function will be called when getProperty(propertyKey) is invoked.
License
The ISC License
Copyright (c) 2020 Fredrique Samuels (https://codingworkbench.com)
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.