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

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

Сообщение Anonymous »

У меня есть 3 различных реализации API некоторых функций, и все они имеют свой собственный метод Registerservices для регистрации своих собственных опций и услуг с помощью стандартного контейнера .NET.
Например, у меня есть myawss3service , myazureblobstorageservice и myfilesystemservice . У них есть свои собственные myawss3servicesettings , myazureblobstorageservicesettings и myfilesystemservicesettings . Все они получены из абстрактного MyCommonSettingSbase класс:

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

public abstract class MyCommonSettingsBase {
...
}

public class MyAwsS3Service : MyCommonSettingsBase {
...
}

public class MyAzureBlobStorageService : 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)?

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

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

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

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

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

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