考虑下面的代码示例:
public interface IMyInterface
{
void SetName(string name);
string GetName();
}
public class MyInterfaceImplementor1 : IMyInterface
{
protected string Name { set; get; }
public void SetName(string name)
{
this.Name = name;
}
public virtual string GetName()
{
return this.Name;
}
}
public class MyInterfaceImplementor2 : MyInterfaceImplementor1
{
public override string GetName()
{
return String.Format("Hello! {0}", base.Name);
}
}
以及为此的 DI 配置:(提供了StructureMap代码片段)
ObjectFactory.Configure(x =>
{
x.For<IMyInterface>()
.Use<MyInterfaceImplementor1>();
});
ObjectFactory.Configure(x =>
{
x.For<IMyInterface>()
.Use<MyInterfaceImplementor2>();
});
比如说,在我的代码中,有时我使用MyInterfaceImplementor1,而在其他时候,我使用MyInterfaceImplementor2。我的问题是,DI 框架(StructureMap 或任何其他)将如何解决上述配置?此外,它将如何确定在何处返回MyInterfaceImplementor1的实例以及何时返回MyInterfaceImplementor2的实例?或者我在这里做错了什么?