0

我正在使用 ABP 框架,并且想注册一个单例类以供全局使用。但它需要一些其他类。所以我想让 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.
}
4

1 回答 1

1

这似乎是一个XY 问题

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

是的,您可以将AddSingletoninConfigureServices与函数一起用作实现工厂。

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)

不,没有支持的方式。

于 2019-07-21T16:06:20.557 回答