一个 .NET Dapr 可插拔组件的应用环境

如何配置 .NET 可插拔组件的环境

一个.NET Dapr可插拔组件应用可以像ASP.NET应用程序一样配置依赖注入、日志记录和配置值。 DaprPluggableComponentsApplication 暴露了与 WebApplicationBuilder 暴露的相似的配置属性集。

使用依赖输入

使用服务注册的组件可以参与依赖注入。 在组件的构造函数中,参数将在创建过程中进行注入,假设这些类型已经在应用程序中注册。 您可以通过 DaprPluggableComponentsApplication 暴露的 IServiceCollection 进行注册。

  1. var app = DaprPluggableComponentsApplication.Create();
  2. // Register MyService as the singleton implementation of IService.
  3. app.Services.AddSingleton<IService, MyService>();
  4. app.RegisterService(
  5. "<service name>",
  6. serviceBuilder =>
  7. {
  8. serviceBuilder.RegisterStateStore<MyStateStore>();
  9. });
  10. app.Run();
  11. interface IService
  12. {
  13. // ...
  14. }
  15. class MyService : IService
  16. {
  17. // ...
  18. }
  19. class MyStateStore : IStateStore
  20. {
  21. // Inject IService on creation of the state store.
  22. public MyStateStore(IService service)
  23. {
  24. // ...
  25. }
  26. // ...
  27. }

警告

不推荐使用IServiceCollection.AddScoped()。 这些实例的生命周期与单个 gRPC 方法调用绑定,这与单个组件实例的生命周期不匹配。

日志

.NET Dapr可插拔组件可以使用标准.NET日志机制DaprPluggableComponentsApplication 通过一个 ILoggingBuilder 暴露出来,通过它可以进行配置。

注意

与ASP.NET一样,日志记录器服务(例如,ILogger<T>)已预先注册。

  1. var app = DaprPluggableComponentsApplication.Create();
  2. // Reset the default loggers and setup new ones.
  3. app.Logging.ClearProviders();
  4. app.Logging.AddConsole();
  5. app.RegisterService(
  6. "<service name>",
  7. serviceBuilder =>
  8. {
  9. serviceBuilder.RegisterStateStore<MyStateStore>();
  10. });
  11. app.Run();
  12. class MyStateStore : IStateStore
  13. {
  14. // Inject a logger on creation of the state store.
  15. public MyStateStore(ILogger<MyStateStore> logger)
  16. {
  17. // ...
  18. }
  19. // ...
  20. }

配置值

由于.NET可插拔组件是构建在ASP.NET之上的,它们可以使用其标准配置机制并默认使用相同的预注册提供程序DaprPluggableComponentsApplication 通过一个 IConfigurationManager 暴露出来,通过它可以进行配置。

  1. var app = DaprPluggableComponentsApplication.Create();
  2. // Reset the default configuration providers and add new ones.
  3. ((IConfigurationBuilder)app.Configuration).Sources.Clear();
  4. app.Configuration.AddEnvironmentVariables();
  5. // Get configuration value on startup.
  6. const value = app.Configuration["<name>"];
  7. app.RegisterService(
  8. "<service name>",
  9. serviceBuilder =>
  10. {
  11. serviceBuilder.RegisterStateStore<MyStateStore>();
  12. });
  13. app.Run();
  14. class MyStateStore : IStateStore
  15. {
  16. // Inject the configuration on creation of the state store.
  17. public MyStateStore(IConfiguration configuration)
  18. {
  19. // ...
  20. }
  21. // ...
  22. }