0

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

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

项目结构

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

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

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

我觉得我可以将这些设置传递给WebApp.Clientthrough string[] argsinProgram.csMain方法:

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项目中做到这一点。

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

非常感谢任何帮助。

4

1 回答 1

0

我想了。由于这都是公共信息,我只是将信息硬编码Program.csWebApp.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();
}

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

于 2021-07-25T17:58:14.490 回答