You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wolverine/Lamar的ServiceRegistry中获取IConfiguration实例

在Wolverine的ServiceRegistry子类中获取IConfiguration实例

有两种常用且直接的方式可以实现:

方法一:构造函数注入IConfiguration

直接给自定义ServiceRegistry子类添加接收IConfiguration的构造函数,初始化Registry实例时传入已有的配置对象即可。

示例代码:

// 自定义Registry子类
public class DatabaseRegistry : ServiceRegistry
{
    public DatabaseRegistry(IConfiguration config)
    {
        // 直接使用config读取配置项
        var dbConnString = config.GetConnectionString("DefaultConnection");
        
        For<IDbConnection>().Use<SqlConnection>()
            .Ctor<string>("connectionString").Is(dbConnString);
    }
}

在宿主配置中初始化Registry时传入IConfiguration:

var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;

builder.Host.UseWolverine(opts =>
{
    // 将配置传入自定义Registry
    opts.Services.AddRegistry(new DatabaseRegistry(configuration));
    // 可以添加更多拆分的Registry实例
    opts.Services.AddRegistry(new MessagingRegistry(configuration));
});

方法二:通过Lamar的Registry上下文访问(适用于特殊场景)

如果Registry需要在容器构建过程中动态获取配置,可利用Lamar的Registry的ConfigureServices方法,通过IServiceCollection的扩展获取已注册的IConfiguration:

public class MessagingRegistry : ServiceRegistry
{
    public MessagingRegistry()
    {
        ConfigureServices(services =>
        {
            var config = services.BuildServiceProvider().GetRequiredService<IConfiguration>();
            var rabbitMqUri = config["RabbitMq:Uri"];
            
            For<IMessageBroker>().Use<RabbitMqBroker>()
                .Ctor<string>("uri").Is(rabbitMqUri);
        });
    }
}

注意:这种方法会提前构建临时服务提供者,仅在必要时使用,优先推荐方法一的构造函数注入,更符合依赖注入的设计原则。

内容的提问来源于stack exchange,提问作者Luka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:46:09