有什么方法可以在ABP framewrok下的ApplicationInitialization中使用AddSingleton?

时间:2019-07-19 11:04:41

标签: .net core abp

我正在使用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.
}

1 个答案:

答案 0 :(得分:0)

这似乎是XY Problem

是否可以注册需要其他某些类的单例类? (问题X)

是的,您可以将AddSingleton中的ConfigureServices与实现工厂一起使用。

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)

不,没有受支持的方式。