【发布时间】:2019-04-05 00:15:57
【问题描述】:
我有一个关于构建依赖关系的正确方法的问题。
假设你有一个 web api 控制器,它有一个带有两个参数的方法:id 和 bar。 控制器需要根据 'id' 值读取特定配置,并向应用了该配置的不同服务发出请求。
public class FooController : ApiController
{
private readonly IConfigurationProvider _configurationProvider;
private readonly IService _service;
public FooController(IConfigurationProvider configurationProvider, IService service)
{
_configurationProvider = configurationProvider;
_service = service;
}
public IHttpActionResult Bar(int id, int bar)
{
var configuration = _configurationProvider.GetConfiguration(id);
_service.Configure(configuration);
var barResult = _service.Bar(bar);
return Ok(barResult);
}
}
我不太确定我在依赖注入方面做得对:
- 服务在构造函数中初始化,但配置 在执行请求之前不知道。服务的客户 可能不会调用配置,它可能会导致问题(会某种 Builder 模式在这里工作?)。
- 服务本身是否应该负责其配置加载?
从依赖注入的角度来看,这个例子还有其他问题吗?
谢谢。
【问题讨论】:
-
您的依赖结构似乎有误。控制器依赖于 IConfigurationProvider,但实际上不做任何事情,只是将检索到的配置传递给它也依赖的服务。此外,依赖项不应该是基础设施代码,IConfigurationProvider 看起来就像基础设施代码渗入您的控制器。所以真正应该发生的是,这些基础设施问题应该在您的组件注册代码中处理。
-
了解您正在使用的 IoC 容器也很好。
标签: asp.net-web-api dependency-injection dependencies