我们知道在root模块提供程序中,我们可以设置一个if (!empty($_POST["category"])) {
$pdt = $_POST['category'];
$sql = "SELECT * FROM library_details WHERE bookcategory='$pdt'";
$res = mysql_query($sql);
$output = '<option value="">Select from here</option>';
while ($row = mysql_fetch_array($res)) {
$output .= '<option value="' . $row["bookname"] . '">"' . $row["bookname"] . '"</option>';
}
echo $output;
}
来引导后端的一些依赖项,然后加载第一个组件
APP_INITIALIZER
我将以上述方式在应用程序启动之前加载我的用户配置,但我想更多地进行更多操作,例如在应用程序启动之前连接websocket。
我知道我可以在我编写的{
provide: APP_INITIALIZER,
useFactory: configLoader,
multi: true,
deps: [ConfigService]
}
函数中执行,首先加载配置,然后在该configLoader函数中连接websocket,但由于某些原因,我现在不能这样做,所以我需要做的就像这样:
configLoader
但不幸的是,它不起作用。那么有没有办法加载多个应用程序初始化程序?
答案 0 :(得分:9)
useFactory
不应该是一个数组
{
provide: APP_INITIALIZER,
useFactory: websocketLoader,
multi: true,
deps: [ConfigService, WebsocketService]
},
{
provide: APP_INITIALIZER,
useFactory: configLoader,
multi: true,
deps: [ConfigService, WebsocketService]
}
multi: true
为多个提供商提供相同的密钥(APP_INITIALIZER
),不会覆盖前一个(使用multi: false
的行为),但DI会将它们收集到一个数组中本身。