我正在使用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.
}
答案 0 :(得分:0)
这似乎是XY Problem。
是的,您可以将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);
});
}
不,没有受支持的方式。