我们创建了一个简单的 NuGet 包,它包装了我们最常用的请求函数(基本上是使用 HttpClient 发送 API 请求),因此我们不必在每个项目中再次实现它们。我们使用一个名为
RequestService
的类,它处理请求并保存 HttpClient
的实例。现在,在一个应用程序中,我可以在设置中动态设置 API-URL,因此我想告诉 RequestService
HttpClient
的配置发生了一些变化。
我想在更改设置时引发一个事件,但由于
RequestService
NuGet 不了解该应用程序,因此这对我来说似乎不是最干净的解决方案。对于如何告诉 NuGet 包我的代码中发生了某些更改,是否有一个很好的解决方案?
在没有看到代码的情况下,很难判断。以下是一些选项:
您可以创建一些抽象,允许通过某些中间对象在
RequestService
中注入 url/设置。例如如下所示:
public interface IUrlProvider
{
string Url { get; }
}
public class RequestService
{
private readonly IUrlProvider _urlProvider;
public RequestService(IUrlProvider urlProvider) => _urlProvider = urlProvider;
// use _urlProvider.Url in the methods
}
// for non-dynamic urls
public class ConstantUrlProvider : IUrlProvider
{
public ConstantUrlProvider(string url) => Url = url;
public string Url { get; }
}
另一个实现将由应用程序控制,允许在需要时管理/更改 url。
您还可以考虑使用选项模式来管理.NET中使用的设置 - 它提供了不同的选项来处理此类事情,其中之一是
IOptionsMonitor
,它与之前的方法类似IOptionsMonitor<TOptions>.CurrentValue
属性,并允许通过 IOptionsMonitor<TOptions>.OnChange
订阅更改。