public interface IFoo{}
public class Foo1 : IFoo {
public Foo1(int id){}
public Foo1(string val){}
}
public class Foo2 : IFoo {
public Foo2(int id){}
public Foo2(string val){}
}
相应的注册表设置是……
ForRequestedType<IFoo>().TheDefault.Is.ConstructedBy(()=>new Foo1("some string val"));
InstanceOf<IFoo>().Is.OfConcreteType<Foo2>();
然后我们使用IFoo作为其他东西的参数… ex:
public interface IBar{}
public class Bar1:IBar {
public Bar1(IFoo foo){}
}
public class Bar2:IBar {
public Bar2(IFoo foo){}
}
注册如下……
ForRequestedType<IBar>().TheDefault.Is.OfConcreteType<Bar1>().CtorDependency<IFoo>().Is<Foo1>();
现在我希望Bar2使用Foo2,我希望Foo2使用构造函数“new Foo2(1)”我试过
InstanceOf<Foo2>().Is.ConstructedBy(()=> new Foo2(1));
但那失败了.
如果有的话,我可以使用StructureMap注册表来使其工作吗?
最佳答案 您可以在注册表中执行此操作:
For<IFoo>().Use(() => new Foo2(1)).Named("BarFoo");
For<IFoo>().Use(() => new Foo1("some string val"));
For<IBar>().Use<Bar1>().Ctor<IFoo>().Named("BarFoo");
我测试了这样的结果:
// this will be a Foo1 instance constructed with a string ctor parameter
var foo = container.GetInstance<IFoo>();
// this will be a Bar1, containing an instance of Foo2, constructed with the int ctor parameter
var bar = container.GetInstance<IBar>();
配置行的小解释:
>第1行 – 绑定到Foo2(int)的IFoo注册 – 名为“BarFoo”
>第2行 – 绑定到Foo1的IFoo注册(字符串) – 这将是IFoo的默认值,因为它最后定义
>第3行 – 绑定到Bar1的IBar注册,告诉它使用名为“BarFoo”的绑定来解决IFoo依赖关系