Comments (5)
Why do you require :license
to evaluate before :server
? What does it do?
Also, do you know about prep-key
and resolve-key
?
from integrant.
My example is slightly contrived, but lets say I want the license state to evaluate first as it may cause the system initialisation to stop and I want to ensure the server (or other, possibly side-effecting sub-system) has not started prior.
prep-key and resolve-key relate to a single key, I'm interested in controlling the initialisation order of otherwise unrelated sub-parts of a system.
from integrant.
It sounds like you still have a dependency between :license
and :server
, but you're not interested in the data, just whether or not the initialization was valid.
You can set up automatic relations with prep-key
. For example:
(defmethod ig/prep-key :app/server [_ opts]
(assoc opts ::depends-on (ig/ref :app/license)))
You can use ig/refset
to make it an optional dependency:
(defmethod ig/prep-key :app/server [_ opts]
(assoc opts ::depends-on (ig/refset :app/license)))
from integrant.
Thanks James, I'm struggling to remember the usual cases but I expect generally there's an external, stateful co-dependency where I'm not interested in the data but do require a creation order within my system.
I'll give prep-key and/or refset a go, seems like that will work.
from integrant.
Interesting discussion. I usually tend to prefer the config approach as in @d-t-w 's initial message, so if you have to change the init order you don't have to change the code, but only the config. But in the case of a license, the prep-key seems like a good solution.
from integrant.
Related Issues (20)
- Uninitialized/literal configs HOT 1
- Tests don't run with 1.11 due to clojure.test/run-test already being defined HOT 1
- Feature proposal: expand-key HOT 2
- Any way to add constant key in `edn`? HOT 2
- ClojureScript support for `read-string` HOT 4
- Deprecate :include-refsets? in favor of :include-reflikes? HOT 16
- Decouple top-level keys from configuration type definitions HOT 9
- [Feature] Ability to provide custom hierarchy to `init` method HOT 6
- Would you consider an integrant2 to support extensible build steps? HOT 10
- Why does resume halt unspecified system keys? HOT 4
- Support usage in Babashka environments HOT 20
- #{:idea} Pass the spec validations step on all defined states before calling init-key. HOT 1
- is it possible to access a component after it's init-key, but before it gets passed to the next key that depends on it? HOT 2
- Enter Integrant Video
- Add support for custom assertf definitions HOT 2
- Question: Extract "validation keys" logic from core/build implementation HOT 4
- Feature request: pre-init hook
- No method in multimethod 'init-key' for dispatch value HOT 2
- #ig/ref should allow for deep references HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from integrant.