【发布时间】:2020-08-17 02:10:00
【问题描述】:
我有一个应该在应用程序启动时创建的服务,我想向程序外部提供有关该服务的信息。
我的想法是一个 gRPC 服务器(.NET Core 3.1),它在程序开始时创建服务,并使用默认的 IoC 容器将服务转发到 gRPC 控制器。我的服务还应该能够使用默认 IServiceProvider 的其他服务(例如用于日志记录)。
我的第一种方法是在ConfigureServices 中创建服务并将实例传递给AddSingleton。这不起作用,因为我的服务需要 IServiceProvider 尚未在 ConfigureServices 中构建。
然后我发现你可以指定一个将服务提供者作为参数的工厂:
services.AddSingleton<IService>(serviceProvider => new Service(serviceProvider));
现在,我的服务可以访问所有其他服务,但只有在 gRPC 客户端请求有关服务的信息时才会创建它。
有没有办法立即实例化服务?
提前谢谢你。
【问题讨论】:
标签: c# .net-core dependency-injection grpc