gpt4 book ai didi

c# - 结构图 : How to setup for Specific Concrete Instance of Interface to use particular CTOR

转载 作者:行者123 更新时间:2023-11-30 12:33:50 27 4
gpt4 key购买 nike

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 作为其他东西的参数...例如:

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 行 - 绑定(bind)到 Foo2(int) 的 IFoo 注册 - 命名为“BarFoo”
  • 第 2 行 - 绑定(bind)到 Foo1(string) 的 IFoo 注册 - 这将是 IFoo 的默认值,因为它是最后定义的
  • 第 3 行 - 绑定(bind)到 Bar1 的 IBar 注册,告诉它使用名为“BarFoo”的绑定(bind)来解决 IFoo 依赖性

关于c# - 结构图 : How to setup for Specific Concrete Instance of Interface to use particular CTOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8328754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com