Я создал API, который занимается галереями изображений. По сути, вы создаете галерею, устанавливаете некоторые атрибуты, такие как слизняк, заголовок, описание, настройки CDN, большие пальцы и т. Д. Кроме того, вы указываете ограничения размера изображений и ограничения размеров миниатюр.
Gallery имеет коллекцию изображений. Каждое рисунок имеет заголовок, созданный и т. Д. Изображения могут быть созданы индивидуально из файла или из URL. Или, они могут быть созданы в партии - из локальной папки или из некоторого местоположения (ы). Есть много вещей - параллельное масштабирование, несколько форматов изображений, содержимое копирования галереи и т. Д. Такая же функциональность, и все они имеют свой собственный метод Registerservices для регистрации своих собственных параметров и услуг с помощью стандартного контейнера .NET. , Myazureblobstorageservice и myfilesystemservice . У них есть свои собственные myawss3servicesettings , myazureblobstorageservicesettings и myfilesystemservicesettings . Все они получены из абстрактного MyCommonSettingSbase класс:
Код: Выделить всё
public abstract class MyCommonSettingsBase {
...
}
public class MyAwsS3ServiceSettings : MyCommonSettingsBase {
...
}
public class MyAzureBlobStorageServiceSettings : 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)? < /p>
Общая цель < /h3>
Я хотел бы зарегистрировать несколько реализаций, может быть, все три. Таким образом, я могу создать галерею в файловой системе, а затем просто клонировать ее в S3 и Azure.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -parameter
Мобильная версия