我们正在使用 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
}
所以现在我们要选择性地解析上面两个类中的IInterface
。 Class1
和 Class2
。
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/