C# 使用构造函数参数上的属性通过构造函数注入和命名映射解析依赖关系

C# 使用构造函数参数上的属性通过构造函数注入和命名映射解析依赖关系,c#,unity-container,C#,Unity Container,假设我有两个不同的具体类,它们都实现相同的接口: public interface IDataSource{ Connection CreateConnection(); } public class DataSourceA: IDataSource { .... } public class DataSourceB: IDataSource { .... } 现在我想在unity容器中注册这两个: var container = new UnityContaine

假设我有两个不同的具体类,它们都实现相同的接口:

public interface IDataSource{
    Connection CreateConnection();
}

public class DataSourceA: IDataSource
{
    ....
}

public class DataSourceB: IDataSource
{
    ....
}
现在我想在unity容器中注册这两个:

var container = new UnityContainer();
container.RegisterType<IDataSource, DataSourceA>("A");
container.RegisterType<IDataSource, DataSourceB>("B");

这样可能吗?我来自java的spring world,在本例中,我将使用@Qualifier注释使用该堆栈

[Dependency("A")]

我个人不喜欢使用Dependency属性,因为您直接依赖Unity库。您还可以在构造函数中传入IUnityContainer

通常,当您需要使用命名依赖项时,这是因为您试图实现某种策略模式

我所做的是在一个名为StrategyResolver的类中隔离Unity,并将StrategyResolver作为依赖项注入。由于StrategyResolver属于我,因此我的“服务”类不再对任何Unity库对象有任何硬依赖,StrategyResolver内部除外,但这是可以接受的,因为在将来添加新策略时,我将不再需要修改StrategyResolver


看一看,我在这个答案中用代码示例详细说明了我的方法:

您想要的完全是可能的。看这里,谢谢。我不久前尝试过,但唯一的“依赖项”属性是在System.Runtime.CompilerServices命名空间中。现在我发现我的问题是我的项目不依赖于unity程序集。
public class ReportController{
  public ReportController([InjectionQualifier("A")] IDataSource dataSource)
  {
    ...
  }
}
[Dependency("A")]