c# – StructureMap:如何设置接口的特定具体实例以使用特定的CT
发布时间:2020-12-15 17:22:12 所属栏目:百科 来源:网络整理
导读: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){}} 相应的注册表设置是…… ForRequestedTypeIFoo().TheDefault.Is.Const
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)); 但那失败了. 解决方法
您可以在注册表中执行此操作:
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依赖关系 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |