我想创建几个类似的服务,这些服务可以通过名称(=键)进行去处理和访问。
对于服务实现,我想使用具有c'tor依赖关系的类,如下所示:
public interface IXYService
{
string Tag { get; set; }
}
public class _1stXYService : IXYService
{
public _1stXYService(string Tag)
{
this.Tag = Tag;
}
public string Tag { get; set; }
}
我尝试使用'AddComponentWithProperties'创建一个可通过给定密钥访问的具体实例:
...
IDictionary l_xyServiceInitParameters = new Hashtable { { "Tag", "1" } };
l_container.AddComponentWithProperties
(
"1st XY service",
typeof(IXYService),
typeof(_1stXYService),
l_xyServiceInitParameters
);
l_xyServiceInitParameters["Tag"] = "2";
l_container.AddComponentWithProperties
(
"2nd XY service",
typeof(IXYService),
typeof(_1stXYService),
l_xyServiceInitParameters
);
...
var service = l_container[serviceName] as IXYService;
但是,依赖关系未得到解决,因此服务不可用。
不需要使用IWindsorContainer.Resolve(...)来填充参数。
通过XML构建工作,但并非在所有情况下都足够。
我怎样才能实现目标?
答案 0 :(得分:2)
如果您想在注册时定义Tag属性:
[Test]
public void Named() {
var container = new WindsorContainer();
container.Register(Component.For<IXYService>()
.ImplementedBy<_1stXYService>()
.Parameters(Parameter.ForKey("Tag").Eq("1"))
.Named("1st XY Service"));
container.Register(Component.For<IXYService>()
.ImplementedBy<_1stXYService>()
.Parameters(Parameter.ForKey("Tag").Eq("2"))
.Named("2nd XY Service"));
Assert.AreEqual("2", container.Resolve<IXYService>("2nd XY Service").Tag);
}