Blazor WASM вводит настройки в библиотеку классов Razor

#c# #blazor-webassembly #payment-processing #razor-class-library

Вопрос:

Мое намерение состоит в том, чтобы создать службу обработки платежей, которую я могу разместить на любом веб-сайте. Моя проблема заключается в введении настроек, таких как открытый ключ Stripe, идентификатор продавца Paypal и конкретный URL-адрес на сервере для отправки токена и взимания платы с stripe.

Это упрощено для этого вопроса (и Payments проекты в конечном итоге будут dll), но структура проекта выглядит так:

Структура проекта

Веб-приложение-это ASP.NET Основной размещенный шаблон проекта Blazor WASM. WebApp.Client имеет зависимости от Payments.Shared и в то Payments.Ui время WebApp.Server Payments.Backend как также зависит от (для моделей с полосовым зарядом и т. Д.).

Поскольку я хочу использовать эту платежную службу на любом сайте, и поскольку они будут разными для каждого сайта, мне нужно будет указать реквизиты PaymentSettings.cs при запуске.

Есть ли способ сделать это? Я планирую использовать только веб-сайты Blazor WASM, если это имеет значение.

Я чувствую, что, возможно, смогу передать эти настройки в метод WebApp.Client сквозного ввода string[] args Program.cs Main :

 public static async Task Main(string[] args)
{
    //omitted for brevity

    //relevant line here
    builder.Services
      .AddSingleton(sp => new Payments.Shared.Infrastructure.PaymentSettings(args));

    await builder.Build().RunAsync();
}
 

а затем оттуда в конструктор для PaymentSettings.cs :

 public class PaymentSettings
{
    public PaymentSettings(string[] args)
    {
        //set props from args
    }

    public string PaypalMerchantId { get; set; }
    public string StripeKey { get; set; }
    public string ChargeStripeUrl { get; set; }
}
 

Но я не вижу никакого способа сделать это из WebApp.Server проекта.

Возможно, я переосмысливаю это, я имею в виду, что если я смогу, по крайней мере, ввести базовый URL WebApp.Server в Payments.Shared проект, я смогу затем выполнить запрос get для остальной его части.

Любая помощь очень ценится.

Ответ №1:

Я слишком много думал об этом. Поскольку это все общедоступная информация, я просто жестко закодировал информацию Program.cs в WebApp.Client :

 public static async Task Main(string[] args)
{
    //omitted for brevity

    string stripeKey = "Hello dolly";
    string paypalId = "How ye be";
    string chargeStripeUrl = "https://all-about-dolly.com/chargeIt";

    //relevant line here
    builder.Services.AddSingleton(sp => new PaymentSettings 
    {
        StripeKey = stripeKey,
        PaypalMerchantId = paypalId,
        ChargeStripeUrl = chargeStripeUrl
    });

    await builder.Build().RunAsync();
}
 

Возможно, это не лучшая практика, но для меня это работает.