Net Core IOptions <appsettings>使用

时间:2019-01-18 14:36:15

标签: c# dependency-injection .net-core asp.net-core-mvc

我在MVC项目中遵循了IOptions模式,可以将我的应用程序设置注入到我的Controller中:

public HomeController(IOptions<AppSettings> appSettings) {
    _appSettings = appSettings.Value;
}

我还有一堆其他从HomeController实例化的类-我是否也可以直接注入这些类中?或者我必须在每个类实例化中传递_appSettings吗?

理想情况下,我所有的类都将注入到构造器中,例如Controller。

1 个答案:

答案 0 :(得分:4)

依赖项注入是全有或全无。如果您要使用DI,那么您总是 使用DI,并且几乎从不手动更新任何东西(除了基本类,如没有依赖性的实体)。换句话说,如果您的控制器正在实例化具有依赖关系的事物,则这些事物应在服务集合中注册并注入到控制器中。例如,假设您正在执行以下操作:

public HomeController(IOptions<AppSettings> appSettings)
{
    _appSettings = appSettings.Value;
}

public IActionResult Foo()
{
    var service = new FooService(_appSettings);

    // do something
}

然后,您应该添加您的ConfigureServices

services.AddScoped<FooService>();

在控制器中,您应该执行以下操作:

public HomeController(FooService fooService)
{
    _fooService = fooService
}

服务集合将负责将您的选项注入服务中,因为服务本身对此有依赖性。