Например, у меня есть myawss3service , myazureblobstorageservice и myfilesystemservice . У них есть свои собственные myawss3servicesettings , myazureblobstorageservicesettings и myfilesystemservicesettings . Все они получены из абстрактного MyCommonSettingSbase класс:
Код: Выделить всё
public abstract class MyCommonSettingsBase {
...
}
public class MyAwsS3Service : MyCommonSettingsBase {
...
}
public class MyAzureBlobStorageService : MyCommonSettingsBase {
...
}
...
Код: Выделить всё
...
builder.Services.AddAzureBlobStorageService(builder.Configuration);
...
< /code>
Этот метод регистрирует все, что связано с моей реализацией хранилища Blob Blob, включая соответствующую настройку. Если бы я использовал реализацию S3, я бы просто использовал builder.services.addawss3service (builder.configuration); Теперь у меня проблема с использованием ioptionssnapshot шаблон. Предположим, у меня есть класс (например, обработчик запросов Mediatr), который использует мой API, и я не могу знать (и не должен знать) заранее, какая реализация используется. Но мне нужно получить ioptionssnapshot (или ioptions ) в конструктор, чтобы получить настройки, чтобы распространить его в метод реализации API:
Код: Выделить всё
public class CreateGalleryCommandHandler : IRequestHandler
{
public CreateGalleryCommandHandler(IOptionsSnapshot galOptionsAccessor, IGalleryFactory galleryFactory)
{
...
// here I need to use the galOptionsAccessor to get the settings
_gallerySettings =
galOptionsAccessor.Get(GlobalConstants.MAIN_PAGE_GALLERY_SETTING_NAME_S);
}
public async Task Handle(CreateGalleryCommand request, CancellationToken cancellationToken)
{
IIlgGallery mainPageGal = _galleryFactory.CreateGallery(_gallerySettings);
...
}
}
Надеюсь, я ясно объяснил. Значение настроек как «абстрактная база» IOPTions, а затем извлеките это значение, специфичное для реализации в реализации API (с использованием значения ioptions)?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -parameter
Мобильная версия