Используйте полученный класс для ioptionssnapshot параметрC#

Место общения программистов C#
Ответить
Anonymous
 Используйте полученный класс для ioptionssnapshot параметр

Сообщение Anonymous »

контекст < /h2>
Я создал API, который занимается галереями изображений. По сути, вы создаете галерею, устанавливаете некоторые атрибуты, такие как слизняк, заголовок, описание, настройки CDN, большие пальцы и т. Д. Кроме того, вы указываете ограничения размера изображений и ограничения размеров миниатюр.
Gallery имеет коллекцию изображений. Каждое рисунок имеет заголовок, созданный и т. Д. Изображения могут быть созданы индивидуально из файла или из URL. Или, они могут быть созданы в партии - из локальной папки или из некоторого местоположения (ы). Есть много вещей - параллельное масштабирование, несколько форматов изображений, содержимое копирования галереи и т. Д. Такая же функциональность, и все они имеют свой собственный метод Registerservices для регистрации своих собственных параметров и услуг с помощью стандартного контейнера .NET. , Myazureblobstorageservice и myfilesystemservice . У них есть свои собственные myawss3servicesettings , myazureblobstorageservicesettings и myfilesystemservicesettings . Все они получены из абстрактного MyCommonSettingSbase класс:

Код: Выделить всё

public abstract class MyCommonSettingsBase {
...
}

public class MyAwsS3ServiceSettings : MyCommonSettingsBase {
...
}

public class MyAzureBlobStorageServiceSettings : MyCommonSettingsBase {
...
}

...
Когда я использую одну из реализаций в основном проекте ASP.NET в программе.

Код: Выделить всё

...
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);
...
}
}
Проблема в том, что я не могу преобразовать абстрактные ioptionssnapshot в реализации моей службы в тот, который используется в реализации - ioptionssnapshot . Другими словами, я предоставляю ioptionssnapshot , но я должен получить ioptionssnapshot . Это, кажется, не работает, что я пытаюсь. < /P>
Надеюсь, я ясно объяснил. Значение настройки как «абстрактная база» IOPtions, а затем извлечь это значение, специфичное для реализации в реализации API (с использованием значения ioptions)? < /p>
Общая цель < /h3>
Я хотел бы зарегистрировать несколько реализаций, может быть, все три. Таким образом, я могу создать галерею в файловой системе, а затем просто клонировать ее в S3 и Azure.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»