有没有办法在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)
不,没有支持的方式。
我正在使用 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)
不,没有支持的方式。