当需要不同的参数时,如何注入依赖项?

rem*_*rel 1 dependency-injection inversion-of-control

例如,我有这段代码

public class ProductService{
private IProductDataSource _dataSource = DependencyManager.Get<IProductDataSource>();
public Product Get(int id){
return _dataSource.Select(id);
}
}
Run Code Online (Sandbox Code Playgroud)

我有2个不同的数据源:

  • 仅包含1种语言的信息的XML文件,
  • 一个SQL数据库,包含许多语言的信息.

所以我为IProductDataSource创建了2个实现,用于各种数据源.但是如何将所需语言发送到SQL数据源?

  • 我将参数"language"添加到方法"IProductDataSource.Select",即使我不在XML实现的情况下使用它.
  • 在SQL实现中,我从全局状态获取语言?
  • 我将语言添加到我的SQL实现的构造函数中,但后来我不会使用我的DependencyManager并处理我自己的依赖注入.

也许我的第一个解决方案并不好.

Rem*_*oor 5

第三种选择是要走的路.将语言配置注入SQL实现.还可以删除DependencyManager ServiceLocator并使用构造函数注入.