微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您如何以静态方法在dotnet核心项目中注入IConfiguration对象?

如何解决您如何以静态方法在dotnet核心项目中注入IConfiguration对象?

我有一个this one类似的Redis商店。我的问题是,由于我使用的是.Net Core,因此在第15行上,我应该使用通常注入到构造函数中的配置对象。

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

我尝试添加一个静态方法来初始化config对象,但是构造函数抛出NullReferenceException,因为显然ctor仍然是在Init方法之前首先被调用的,并且它需要config对象。要做

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

解决方法

我建议您不要改用较新的模式并正确使用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>());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。