Blazor WASM 将设置注入 Razor 类库

问题描述

我的意图是创建一种支付处理服务,我可以将其固定在任何网站的一侧。我的问题是注入设置,例如 Stripe 公钥、Paypal 商家 ID 以及服务器上用于发送令牌和对 Stripe 收费的特定 URL。

针对这个问题进行了简化(Payments 项目最终将成为 dll 的),但项目结构如下所示:

Project structure

WebApp 是 ASP.NET Core 托管的 Blazor WASM 项目模板。 WebApp.Client 依赖于 Payments.SharedPayments.Ui,而 WebApp.Server 也依赖于 Payments.Backend(对于 Stripe 充电响应等模型)。

由于我想在任何网站上使用此付款服务,而且每个网站的这些服务都不同,因此我需要在启动时在 PaymentSettings.cs 中设置道具。

有没有办法做到这一点?如果重要的话,我只打算与 Blazor WASM 网站一起使用。

我觉得我可以在 WebApp.Clientstring[] 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 项目中没有看到任何方法可以做到这一点。

也许我想多了,我的意思是,如果我至少可以将 WebApp.Server 的基本 url 注入到 Payments.Shared 项目中,然后我可以为它的其余部分运行 get 请求。

非常感谢任何帮助。

解决方法

想多了。由于都是公开信息,我只是将信息硬编码到 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();
}

可能不是最佳实践,但对我有用。