c# - 选择性地统一解决同一接口(interface)的依赖关系

标签 c# .net inversion-of-control unity-container

我们正在使用 Unity 框架进行依赖注入(inject)。我正在为同一个类注册两个具体实现。就像...

container.RegisterType<IInterface, MyFirstClass>("first");
container.RegisterType<IInterface, MySecondClass>("second");

现在很少有类具有上述接口(interface)的构造器注入(inject)..

 public class Class1
    {
       private IInterface _myClass
       public Class1 (IInterface myClass)
       {
         _myClass = myClass // // should be instance of MyFirstClass
       }
 //.. other code
    }

   public class Class2
    {
       private IInterface _myClass

       public Class2 (IInterface myClass)
       {
         _myClass = myClass // should be instance of MySecondClass
       }
 //.. other code
    }

所以现在我们要选择性地解析上面两个类中的IInterfaceClass1Class2

Class1 应使用 MyFirstClass 注入(inject),Class2 应使用 MyFirstClass 注入(inject)。这可以通过Unity框架实现吗?如果不支持,还有哪些其他 IoC 框架支持?

请提出您的意见。

最佳答案

试试这个

var container = new UnityContainer();
container.RegisterType<IInterface, MyFirstClass>("first");
container.RegisterType<IInterface, MySecondClass>("second");
container.RegisterType<Class1>(new InjectionConstructor(new ResolvedParameter(typeof(IInterface), "first")));
container.RegisterType<Class2>(new InjectionConstructor(new ResolvedParameter(typeof(IInterface), "second")));
var class1 = container.Resolve<Class1>();
Assert.IsInstanceOfType(class1.MyClass, typeof(MyFirstClass));
var class2 = container.Resolve<Class2>();
Assert.IsInstanceOfType(class2.MyClass, typeof(MySecondClass));

public class MyFirstClass : IInterface
{
}

public class MySecondClass : IInterface
{
}

public interface IInterface
{
}

public class Class1
{
  public IInterface MyClass { get; set; }
  public Class1(IInterface myClass)
  {
    MyClass = myClass;
  }
}
public class Class2
{
  public IInterface MyClass { get; set; }
  public Class2(IInterface myClass)
  {
    MyClass = myClass;
  }
}

关于c# - 选择性地统一解决同一接口(interface)的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425140/

相关文章:

用于 ASCII 文件导入/映射的 C# 库

.net - 在部分信任环境中测试 .NET 代码

c# - 在 C# 中,是否保证任何给定线程都会看到另一个线程对引用类型变量的值所做的更新?

c# - LINQ to Entities 查询和 GUID 区分

删除了 C# 和 IoC 传递依赖项

class - IOC 使用 AutoFac 进行内部类

c# - "Prefix"和 "as"转换

c# - 将大型 ASP.NET VB.NET 项目转换为 C# - 增量?

c# - 使用 SqlCommand 的最佳实践

asp.net-mvc - 如何创建 MVC 4 模块化应用程序