Comparing version 0.0.8 to 0.0.9
@@ -6,4 +6,11 @@ import BaseDefinition from "../definitions/BaseDefinition"; | ||
private readonly factory; | ||
private isSingleton; | ||
private value; | ||
constructor(factory: Factory); | ||
/** | ||
* Makes factory to resolve dependency only once, | ||
* then resolved value will be returned | ||
*/ | ||
singleton(): this; | ||
resolve: <T>(container: IDIContainer) => T; | ||
} |
@@ -24,4 +24,12 @@ "use strict"; | ||
var _this = _super.call(this) || this; | ||
_this.isSingleton = false; | ||
_this.resolve = function (container) { | ||
return _this.factory(container); | ||
if (!_this.isSingleton) { | ||
return _this.factory(container); | ||
} | ||
if (_this.value !== undefined) { | ||
return _this.value; | ||
} | ||
_this.value = _this.factory(container); | ||
return _this.value; | ||
}; | ||
@@ -31,2 +39,10 @@ _this.factory = factory; | ||
} | ||
/** | ||
* Makes factory to resolve dependency only once, | ||
* then resolved value will be returned | ||
*/ | ||
FactoryDefinition.prototype.singleton = function () { | ||
this.isSingleton = true; | ||
return this; | ||
}; | ||
return FactoryDefinition; | ||
@@ -33,0 +49,0 @@ }(BaseDefinition_1.default)); |
{ | ||
"name": "rsdi", | ||
"version": "0.0.8", | ||
"version": "0.0.9", | ||
"description": "dependency injection container", | ||
@@ -5,0 +5,0 @@ "scripts": { |
@@ -10,8 +10,9 @@ # RSDI - Dependency Injection Container | ||
const config = { | ||
"ENV": value("PRODUCTION"), // define raw value | ||
"Storage": object(CookieStorage), // constructor without arguments | ||
"ENV": value("PRODUCTION"), // define raw value | ||
"AuthStorage": object(AuthStorage).construct( | ||
get("Storage") // refer to dependency described above | ||
get("Storage") // refer to another dependency | ||
), | ||
"BrowserHistory": factory(configureHistory), | ||
"Storage": object(CookieStorage), // constructor without arguments | ||
"dateFormatter": factory(dateFormatter), // factory | ||
"BrowserHistory": factory(configureHistory).singleton(), // factory singleton | ||
}; | ||
@@ -21,8 +22,7 @@ const container = new DIContainer(); | ||
const env = container.get<string>("ENV"); // PRODUCTION | ||
const authStorage = container.get<AuthStorage>("AuthStorage"); // object of AuthStorage | ||
const history = container.get<History>("BrowserHistory"); // object of History | ||
function configureHistory(container: IDIContainer): History { | ||
function dateFormatter(date: Date) { | ||
return moment(date).format("ddd, DD MMM YYYY"); | ||
} | ||
function configureHistory(container: IDIContainer): History { | ||
// this factory will be called only once | ||
const history = createBrowserHistory(); | ||
@@ -36,2 +36,10 @@ const env = container.get("ENV"); | ||
// in your code | ||
const env = container.get<string>("ENV"); // PRODUCTION | ||
const authStorage = container.get<AuthStorage>("AuthStorage"); // object of AuthStorage | ||
const history = container.get<History>("BrowserHistory"); // History singleton will be returned | ||
``` | ||
@@ -53,2 +61,4 @@ | ||
``` | ||
Why component Foo should know that it's injectable? | ||
Why component Foo should know that it's injectable? | ||
More details thoughts in my [blog article](https://medium.com/@radzserg/https-medium-com-radzserg-dependency-injection-in-react-part-1-c1decd9c2e7a) |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
23739
379
61
0