Angular4 第四章 使用工厂方法和值对象声明提供器

来源:互联网 发布:excel编程常用代码 编辑:程序博客网 时间:2024/05/16 00:32

1.工厂方法提供器声明 useFactory

  providers: [    { provide:StockService,      useFactory:(logger:LoggerService)=>{       //let logger=new LoggerService();  //耦合性       let dev=Math.random()>0.5;       if(dev){          return new StockService(logger);       }else{         return new AnotherStockService(logger);       }     },     deps:[LoggerService]  //可将声明的提供器LoggerService传给工厂构造方法  }    ,LoggerService  ],

工厂方法提供器无论你调用几次,只会实例化一次,stock和stock2都使用了StockService这个提供器,所以二者显示的数据都是一样,使用的实例化对象始终是第一次实例化的

2.值对象提供器声明  useValue

 providers: [    { provide:StockService,      useFactory:(logger:LoggerService,isDev)=>{       //let logger=new LoggerService();  //耦合性       let dev=Math.random()>0.5;       console.log(isDev);       if(dev){          return new StockService(logger);       }else{         return new AnotherStockService(logger);       }     },     deps:[LoggerService,"IS_DEV_ENV"]  //一一对应工厂方法的参数  }    ,LoggerService,    {provide:"IS_DEV_ENV",useValue:false}  ],

3.将LoggerService也用工厂方法声明

 providers: [    { provide:StockService,      useFactory:(logger:LoggerService,isDev)=>{       //let logger=new LoggerService();  //耦合性       let dev=Math.random()>0.5;       console.log(isDev);       if(dev){          return new StockService(logger);       }else{         return new AnotherStockService(logger);       }     },     deps:[LoggerService,"IS_DEV_ENV"]  //一一对应工厂方法的参数  }    ,    {provide:LoggerService,useFactory:()={...}}    ,    {provide:"IS_DEV_ENV",useValue:false}  ],


原创粉丝点击