@ exodus/ 依赖性预处理器
IOC 预处理器功能
使用量
运行内置和自定义预处理器如下:
import createIocContainer from '@exodus/dependency-injection'
import preprocess from '@exodus/dependency-preprocessors'
import { logify, config, alias, namespaceStorage } from '@exodus/dependency-preprocessors'
const createLogger =
(namespace) =>
(...args) =>
console.log(namespace, ...args)
const ioc = createIocContainer({ logger: createLogger('exodus:ioc') })
const customPreprocessor = ({ definition, ...extras }) => ({ definition, ...extras })
const deps = preprocess({
dependencies: createDependencies({ adapters, config }),
preprocessors: [
//
logify({ createLogger }),
config(),
alias(),
namespaceStorage(),
customPreprocessor,
],
})
ioc.registerMultiple(deps)
ioc.resolve()
预处理器
登录
通过一个命名空格日志实例
import createIocContainer from '@exodus/dependency-injection'
import preprocess from '@exodus/dependency-preprocessors'
const createLogger =
(namespace) =>
(...args) =>
console.log(namespace, ...args)
const ioc = createIocContainer({ logger: createLogger('exodus:ioc') })
const deps = preprocess({
dependencies: [
{
definition: {
id: 'myModule',
factory: ({ logger }) => logger.warn('sync finished'), // Logs will be prefixed with [myModule:warn]
},
},
],
preprocessors: [logify({ createLogger })],
})
ioc.registerMultiple(deps)
ioc.resolve()
配置
执行全局配置自动绑定给定的模块代号, 或从节点注入, 如果该节点上定义了“ 配置 ” .
import createIocContainer from '@exodus/dependency-injection'
import preprocess from '@exodus/dependency-preprocessors'
import { config } from '@exodus/dependency-preprocessors'
const createLogger =
(namespace) =>
(...args) =>
console.log(namespace, ...args)
const ioc = createIocContainer({ logger: createLogger('exodus:ioc') })
const deps = preprocess({
dependencies: [
{
definition: {
id: 'config',
factory: () => ({ myModule: { apiUrl: 'https://exodus.com' } }),
},
},
{
definition: {
id: 'myModule',
factory: ({ config }) => config.apiUrl,
dependencies: ['config'],
},
},
{
definition: {
id: 'nodeInjected',
factory: ({ config }) => config.potter.spells, // [lumos]
dependencies: ['config'],
},
config: {
potter: {
spells: ['lumos'],
},
},
},
],
preprocessors: [config()],
})
ioc.registerMultiple(deps)
ioc.resolve()
别名
别名注入依赖, 例如您可以注入全局依赖 myMobileImplementationOfSomething 作为本地命名选项 something 到一个模块.
见 实例。 。 。 .
命名空间集
指定您依赖的存储位置 .
见 实例。 。 。 .
仅读原子
使所有原子只读, 除非配置为可写入
import { readOnlyAtoms } from '@exodus/dependency-preprocessors'
const deps = preprocess({
dependencies: [
{
definition: {
id: 'balances',
factory: () => ({ myModule: { apiUrl: 'https://exodus.com' } }),
dependencies: ['currencyAtom', 'balancesAtom'],
},
},
],
preprocessors: [readOnlyAtoms()],
})
警告你们,不要抛下它 warn 旗为 true 并注入一个日志存储器 :
import { readOnlyAtoms } from '@exodus/dependency-preprocessors'
const deps = preprocess({
// ...
preprocessors: [readOnlyAtoms({ warn: true, logger: createLogger('readOnlyAtoms') })],
})
选项
允许有条件地使用 if 属性 :
import { optional } from '@exodus/dependency-preprocessors'
const deps = preprocess({
dependencies: [
{
if: ENABLE_OPTIMISTIC_ACTIVITY,
definition: {
id: 'optmisticBalances',
factory: () => ({ myModule: { apiUrl: 'https://exodus.com' } }),
dependencies: ['balancesAtom'],
},
},
],
preprocessors: [optional()],
})
devMode原子
帮助检测各种众所周知的原子问题
import { devModeAtoms } from '@exodus/dependency-preprocessors'
const deps = preprocess({
dependencies,
preprocessors: [
devModeAtoms({
logger,
// throw when observers seem to hang
timeoutObservers: {
delay: 1000,
},
// warn is set() is called with the same value as the current value
warnOnSameValueSet: true,
// warn when observers throw/reject instead of crashing set()
swallowObserverErrors: true,
}),
],
})
性能监视器
环绕方法在一个通知超过配置阈值的方法的执行时间的代理中向IOC节点调用.
import { performanceMonitor } from '@exodus/dependency-preprocessors'
const deps = preprocess({
dependencies,
preprocessors: [
performanceMonitor({
now: performance.now, // default
onAboveThreshold: ({ id, method, duration }) => {
console.log(`[exodus:${id}:perf]`, `${method} took ${duration}ms`)
},
config: {
threshold: 50, // default, logs any method calls taking longer than 50ms
},
}),
],
})