Я реализую конечный автомат, где каждый класс представляет состояние.Каждое государство знает, в какие другие состояния оно может перейти, и это, естественно, приводит к круговым отношениям.(См. State Design Pattern ).
Для этого упрощенного примера я создаю два компонента, где первый компонент имеет ссылку на второй компонент, а второй компонент имеет ссылкук первому.
Проблема в том, что инфраструктура Windsor правильно устанавливает ссылки для первого созданного компонента, но не устанавливает ссылки для второго:
Вот два компонента:
// DefaultMouseHandler knows about NewLineMouseHandler
public class DefaultMouseHandler : MouseHandler
{
public DefaultMouseHandler()
{
}
public NewLineMouseHandler NewLineMouseHandler
{
get;
set;
}
internal override MouseHandler LeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
{
return this.NewLineMouseHandler;
}
}
// NewLineMouseHandler knows about DefaultMouseHandler
public class NewLineMouseHandler : MouseHandler
{
public NewLineMouseHandler()
{
}
public DefaultMouseHandler DefaultMouseHandler
{
get;
set;
}
internal override MouseHandler LeftButtonUp(System.Windows.Input.MouseButtonEventArgs e)
{
return this.DefaultMouseHandler;
}
}
Затем я регистрирую компоненты следующим образом:
_windsorContainer.Register(Classes.FromThisAssembly()
.BasedOn<MouseHandler>()
);
Но при первой попытке создать DefaultMouseHandler
:
-
DefaultMouseHandler
NewLineMouseHandler
построен NewLineMouseHandler
установлен на DefaultMouseHandler
Но DefaultMouseHandler
НЕ установлен наNewLineMouseHandler
.
Можно ли считать это дефектом в Виндзорском замке?
Каков наилучший способ, чтобы два компонента ссылались друг на друга, при этом ни один из компонентов не знал о контейнере Windsor?