繁体   English   中英

你如何在 static 方法中注入 do.net 核心项目 IConfiguration object?

[英]How do you inject in dotnet core project in static method an IConfiguration object?

我有一家 Redis 商店与家类似。 我的问题是,因为我使用的是 .Net Core,在第 15 行,我应该使用我通常在构造函数中注入的配置 object。

但是,不能在 static 构造函数中注入配置 object,因为 static 构造函数在 C# 中应该是无参数的。

我尝试添加一个 static 方法来初始化配置 object,但随后构造函数抛出NullReferenceException ,因为显然在 Init 方法之前仍然首先调用 ctor,并且它需要配置 object...那该怎么办?

似乎不是一个好的解决方法。

与其使用静态进行所有工作并尝试让它工作(提示:它永远不会使用 static 构造函数),我建议您转向更新的模式并正确使用 DI。

如果您真的不需要懒惰,这就像注入IConnectionMultiplexer一样简单:

services.AddScoped<IConnectionMultiplexer>(s => ConnectionMultiplexer.Connect(configuration["someSettings"]));

如果你确实需要懒惰:

// public interface IRedisStore { IConnectionMultiplexer RedisConnection { get; } } 
public class RedisStore : IRedisStore
{
    private readonly Lazy<ConnectionMultiplexer> LazyConnection;

    public RedisStore(IConfiguration configuration)
    {
        var configurationOptions = new ConfigurationOptions
        {
            EndPoints = { configuration["someSettings"] }
        };

        LazyConnection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(configurationOptions));
    }

    public IConnectionMultiplexer RedisConnection => LazyConnection.Value;        
}

你会注入它:

services.AddScoped<IRedisStore, RedisStore>());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM