Skip to content

Path-IoCSpring 有 Bean,Nest 有 Provider,Path-IoC 有 Mesh

向经典 Spring 致敬的 TypeScript 原生控制反转架构。告别繁琐装饰器与元数据包袱,以纯函数闭包与物理路径契约,实现微秒级极速冷启动的现代拓扑依赖查找引擎。

Path-IoC 品牌标识
Spring 有 Bean · Nest 有 Provider · Path-IoC 有 Mesh

控制反转的三代演进:异步初始化与装配依赖实测

真实工业场景:模块 A (remoteConfig) 启动时需基于秘钥异步发起网络请求拉取配置数据包,对外暴露纯同步函数 isEnabled(feature);模块 B (orderService) 在自身初始化装配期,必须同步调用模块 A 的函数决定是否启用特性(模块 B 强物理依赖模块 A 的初始化先决条件)。

spring/AppConfig.javaSpring · 经典 @Bean 工厂范式
java
// Spring: 依托 JVM 物理多线程模型,在启动阶段阻塞主线程等待异步数据包拉取就绪
@Configuration
public class AppConfig {

  @Bean
  public RemoteConfig remoteConfig() {
    RemoteConfig config = new RemoteConfig();
    config.initFromRemote(secretKey); // 启动阶段阻塞线程等待远程配置完成
    return config;
  }

  @Bean
  public OrderService orderService(RemoteConfig remoteConfig) {
    // 模块 B 在初始化装配期同步调用模块 A 的函数
    boolean enableDiscount = remoteConfig.isEnabled("vip_discount");
    return new OrderService(enableDiscount);
  }
}
nestjs/app.module.tsNestJS · 装饰器崩溃与 useFactory 退化
typescript
// 痛点:TS Class 构造器无法 await!若用 onModuleInit 会因时序竞态读取到未初始化空值;
// 苦心经营的 @Injectable() 类体系在此刻土崩瓦解,被迫退化为冗长脆弱的 useFactory 字典:
@Module({
  providers: [
    {
      provide: 'REMOTE_CONFIG',
      useFactory: async () => {
        const config = await fetchRemoteConfig(process.env.SECRET_KEY);
        return { isEnabled: (feature: string) => config[feature] ?? false };
      }
    },
    {
      provide: 'ORDER_SERVICE',
      useFactory: (config: RemoteConfig) => {
        // 模块 B 必须手写工厂胶水代码,并手动在 inject 数组中维持脆弱的字符串映射
        const enableDiscount = config.isEnabled('vip_discount');
        return new OrderService(enableDiscount);
      },
      inject: ['REMOTE_CONFIG']
    }
  ]
})
export class AppModule {}
src/modules/ (remoteConfig & orderService)Path-IoC · 原生拓扑编排与零竞态装配
typescript
// 模块 A (src/modules/remoteConfig/index.ts):原生 async 函数初始化,返回纯同步闭包方法
export const main = async () => {
  const config = await fetchRemoteConfig(process.env.SECRET_KEY);
  return {
    isEnabled(feature: string) { return config[feature] ?? false; } // 内部数据已就绪,纯同步!
  };
};

// 模块 B (src/modules/orderService/index.ts):声明依赖短名称,装配期直接同步消费
export const dependencies = ["remoteConfig"];

export const main = (container: ModularContainer) => {
  const { remoteConfig } = container;
  // 拓扑引擎自动保证:唤醒 orderService 时,remoteConfig 的 async 初始化必定已 100% 解决!
  const enableDiscount = remoteConfig.isEnabled("vip_discount");

  return {
    createOrder(item: string) {
      return { item, price: enableDiscount ? 80 : 100 };
    }
  };
};
硬核压测数据

生产级硬件实测基准 (Apple M5 / Node 24)

查看完整测试方法论 →
50 节点容器实例化
21.2 µs
微秒级无锁直通装配。Serverless / Workers 单次请求期零等待延迟。
500 节点静态图编译
1.72 ms
进程冷启动单次全拓扑 Kahn 校验,随后全局静态缓存复用。
核心引擎代码体积
8.8 KB
纯粹的 ES 模块闭包。零外部重型依赖,零元数据查表开销。
生产级商业 SaaS 脚手架

打造全球出海盈利业务:Path-IoC Pro 脚手架

深度集成 Cloudflare Workers 全球边缘计算 + Hono + React 19 + Path-IoC + Tailwind CSS + Stripe 国际支付履约 + D1 数据库。数小时内上线你的全球化高毛利 SaaS 业务。

Released under the MIT License.