我在MVC项目中遵循了IOptions模式,可以将我的应用程序设置注入到我的Controller中:
public HomeController(IOptions<AppSettings> appSettings) {
_appSettings = appSettings.Value;
}
我还有一堆其他从HomeController实例化的类-我是否也可以直接注入这些类中?或者我必须在每个类实例化中传递_appSettings吗?
理想情况下,我所有的类都将注入到构造器中,例如Controller。
答案 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
}
服务集合将负责将您的选项注入服务中,因为服务本身对此有依赖性。