有没有办法在ABP框架下的ApplicationInitialization中使用AddSingleton?

Is there any way to use AddSingleton in ApplicationInitialization under the ABP framework?

我正在使用 ABP 框架,想注册一个单例 class 供全局使用。但它需要一些其他的 class。所以我想要OnApplicationInitialization函数来注册它。

 public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
     var settingManager = context.ServiceProvider.GetService<ISettingManager>();
     var cloudStorageProviderManager = context.ServiceProvider.GetService<ISlideCloudStorageProviderManager>();
      var cloudProvider = await settingManager.GetOrNullGlobalAsync(CloudStorageSettings.CloudProvider);
      var slideCloudStorage = cloudStorageProviderManager.Resolve(cloudProvider);

      // how to  register slideCloudStorage.
}

这似乎是 XY Problem

有没有办法注册一个需要其他 class 的单例 class? (问题十)

是的,您可以在 ConfigureServices 中使用 AddSingleton 作为实现工厂的功能。

public override void ConfigureServices(ServiceConfigurationContext context)
{
    context.Services.AddSingleton(serviceProvider =>
    {
        var settingManager = serviceProvider.GetService<ISettingManager>();
        var cloudStorageProviderManager = serviceProvider.GetService<ISlideCloudStorageProviderManager>();
        var cloudProvider = settingManager.GetOrNullGlobal(CloudStorageSettings.CloudProvider);
        return cloudStorageProviderManager.Resolve(cloudProvider);
    });
}

请问ABP框架下ApplicationInitialization中有什么方法可以使用AddSingleton吗? (解决方案 Y)

不,没有支持的方式。