gpt4 book ai didi

c# - 温莎城堡 :- Inject Dictionary of Interfaces via configuration

转载 作者:行者123 更新时间:2023-11-30 14:44:06 24 4
gpt4 key购买 nike

您好,我正在尝试注入(inject)一个接口(interface)字典,但我从 caSTLe 中收到这样的错误:-

CaSTLe.MicroKernel.SubSystems.Conversion.ConverterException: 没有注册转换器来处理 IFoo 类型

为了绕过异常,我必须创建一个包含 Ifoo 接口(interface)列表的包装器并使用属性返回它。然后在配置中使用包装器==>字典而不是字典

在 caSTLe 中有没有一种方法可以让我只拥有一个接口(interface)字典而不是执行此解决方法?

public interface IFoo {}
public class Foo {}
public class IfooWrapper {
IList<IFoo> container{get;set;}
}

最佳答案

这对我来说很好用(Windsor 2.0):

namespace WindsorTests {
public interface IService {}
public class Service1 : IService {}
public class Service2 : IService {}
public class Consumer {
private readonly IDictionary<string, IService> services;
public IDictionary<string, IService> Services {
get { return services; }
}
public Consumer(IDictionary<string, IService> services) {
this.services = services;
}
}

[TestFixture]
public class WindsorTests {
[Test]
public void DictTest() {
var container = new WindsorContainer(new XmlInterpreter(new StaticContentResource(@"<castle>
<components>
<component id=""service1"" service=""WindsorTests.IService, MyAssembly"" type=""WindsorTests.Service1, MyAssembly""/>
<component id=""service2"" service=""WindsorTests.IService, MyAssembly"" type=""WindsorTests.Service2, MyAssembly""/>
<component id=""consumer"" type=""WindsorTests.Consumer, MyAssembly"">
<parameters>
<services>
<dictionary>
<entry key=""one"">${service1}</entry>
<entry key=""two"">${service2}</entry>
</dictionary>
</services>
</parameters>
</component>
</components>
</castle>")));
var consumer = container.Resolve<Consumer>();
Assert.AreEqual(2, consumer.Services.Count);
Assert.IsInstanceOfType(typeof(Service1), consumer.Services["one"]);
Assert.IsInstanceOfType(typeof(Service2), consumer.Services["two"]);
}
}
}

关于c# - 温莎城堡 :- Inject Dictionary of Interfaces via configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890287/

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