У меня есть домен, который выглядит примерно так:Castle.Windsor: Условно разрешения дополнительной реализация
public interface IParent{ IChild[] Children { get; set; } }
public class Parent1 : IParent
{
public IChild[] Children { get; set; }
public Parent1(IChild[] children) { Children = children; }
}
public class Parent2 : IParent
{
public IChild[] Children { get; set; }
public Parent2(IChild[] children) { Children = children; }
}
public interface IChild{}
public class Child1 : IChild{}
public class Child2 : IChild{}
я использую ArrayResolver
получить несколько детей для родителей решенных. Что мне нужно иметь, что когда я решаю Parent1
я получаю только Child1
осуществления (возможно, некоторые другие, которые всегда присутствуют) , но когда я решаю Parent2
я хочу добавить Child2
.
Моя первая попытка была такова:
[TestFixture]
public class BasicUnderstandingTests
{
[Test]
public void CanAddImplementationInOverride()
{
var container = new WindsorContainer();
container.Kernel.Resolver
.AddSubResolver(new ArrayResolver(container.Kernel));
container.Register(Component
.For<IParent>().ImplementedBy<Parent1>());
container.Register(Component
.For<IParent>().ImplementedBy<Parent2>().Named("Parent2")
.ServiceOverrides(ServiceOverride.ForKey<IChild>().Eq<Child2>()));
container.Register(Component
.For<IChild>().ImplementedBy<Child1>());
container.Register(Component
.For<IChild>().ImplementedBy<Child2>());
var p1 = container.Resolve<IParent>();
Assert.IsAssignableFrom<Parent1>(p1);
Assert.AreEqual(1, p1.Children.Length);
var p2 = container.Resolve<IParent>("Parent2");
Assert.IsAssignableFrom<Parent2>(p2);
Assert.AreEqual(2, p2.Children.Length);
}
}
Но это терпит неудачу на первом утверждают, если оба Реализации если IChild
регистрируются и на втором утверждают, если только первая реализация зарегистрирована.
Есть ли элегантный способ сделать это, что мне не хватает?
Не должно быть p2.Children.Length быть 1, поскольку вы зарегистрировали только один «Child2»? – PatrickSteele
Нет, дело в том, что у родителя 1 есть только 1 ребенок и родитель 2 ребенка (Child1 и Child2). –