【发布时间】:2021-05-27 16:34:58
【问题描述】:
我有一个关于微服务架构设计的多租户应用程序。
我想注入 X 个服务,具体取决于运行的租户数量。
public void ConfigureServices(IServiceCollection services)
{
// ... OTHER DI
services.AddHttpClient("TenantsService")
.AddTypedClient<ITenantServiceClient>(c => new TenantServiceClient(new TenantServiceClientSettings()
{
AccessKey = Configuration["TenantsService:ApiKey"],
BaseUrl = new Uri(Configuration["TenantsService:Url"])
}, c));
foreach (var tenant in TenantsToRegister)
{
services
.AddGraphQLServer($"{tenant.Name}");
}
...
}
如果我在应用程序启动时有租户列表,上面的代码就可以工作。但我需要从另一个微服务请求该列表。有了这个约束,我需要构建服务提供者才能获得该列表。同时,我需要服务提供者构建之前的列表来注入我需要的服务。
我看到的唯一选项是在运行时添加服务,但我不确定是否可行。
【问题讨论】:
-
微软的 DI 完全是运行时的。你可以做任何你需要做的事情来在你的
ConfigureServices方法中获取TenantsToRegister。 -
@KevinKrumwiede 当我说“运行时”时,我真正想说的是“在服务提供者建立之后”。我需要做的是使用
ITenantServiceClient的异步HTTP 调用,我还将它注入到服务集合中。我没有找到任何方法来做到这一点 -
听起来像是 GetRequiredService 的工作? andrewlock.net/…
标签: .net .net-core graphql hotchocolate