Рассмотрите форму, используя дополнительные параметры для разрешенных компонентов, которые «работают». Обратите внимание, что это okay, если корень разрешен здесь.Как применить сервис переопределять неявно (встроенный, при разрешении) в Castle Windsor?
var c1a = container.Resolve<IC1>(new { v = "a" });
var c1b = container.Resolve<IC1>(new { v = "b" });
// Takes two different objects, of the same interface
var root = container.Resolve<C2>(new { c1a = c1a, c2a = c2a });
Однако мне не нравится это, потому что 1. ни c1a
не c2a
будет «автоматически освобожден» и 2. он чувствует себя слишком по эксплуатации.
container.Release(c2);
container.Release(c1a);
container.Release(c1b);
То, что я хотел бы сделать что-то вроде следующего (который является недействительным, конечно), который использует неявное службы переопределения - обратите внимание, что есть только один прямой Resolve и объекты должны быть созданы ХО внутренне.
var root = container.Resolve<C2>(new {
c1a = InlineOverride.For<IC1>.With(new { v = "a" }),
c2a = InlineOverride.For<IC1>.With(new { v = "a" })
});
container.Release(root); // Just one root
У меня есть чувство, я просто отсутствует понятие/применение Service Overrides, которые, как представляется, поддерживается только явно при регистрации зависимого компонента (С2).