ASPNET Core 2.0:有没有办法在没有构造函数模式的情况下访问IOptions?

时间:2018-03-21 19:37:21

标签: c# asp.net-core

我知道构造函数模式可以获得已配置的IOptions,例如

public SomeClass(IOptions<SomeOptions> someOptions)
{
}

但是,我遇到了一个我想要访问SomeOptions的现有方法的场景。我不想更改该类的构造函数的签名。有没有其他方法可以访问SomeOptions?

2 个答案:

答案 0 :(得分:1)

这是“服务定位器”反模式,但您可以从控制器或任何其他基类中的DI容器中检索服务,这些基类为您提供HttpContext的实例:

var opts = HttpContext.RequestServices.GetService(typeof(IOptions));

答案 1 :(得分:0)

ASP.NET Core中的内置DI容器非常简单,仅通过构造函数支持依赖注入。在您的情况下,您有2个选项(因为您不想更改ctor签名)

  • 通过方法/属性等设置和使用支持依赖注入的任何其他DI容器
  • 或将IOptions<SomeOptions>作为existing method的参数传递。但是在调用方法之前,你需要在其他地方从DI容器中获取选项。