Привет всем!
Есть набор интерфейсов
public interface IRoot
{
IChildA ChildA { get; }
IChildB ChildB { get; }
}
public interface IChildA
{
IGrandChildA GrandChildA { get; }
IGrandChildB GrandChildB { get; }
}
public interface IChildB
{
IGrandChildC GrandChildC { get; }
}
public interface IGrandChildA
{
}
public interface IGrandChildB
{
}
public interface IGrandChildC
{
}
Хочется написать конфигуратор в fluent стиле, который бы хранил ассоциации между интерфейсами, например чтобы это выглядело так
private static void Test()
{
Configurator.Root<IRoot>()
.Join( _ => _.ChildA )
.Join( _ => _.GrandChildA )
.Up()
.Join( _ => _.GrandChildB )
.Up()
.Up()
.Join( _ => _.ChildB );
}
Требуется, чтобы вложенность пар Join/Up была произвольной. Сам конфигуратор вот
public static class Configurator
{
public static IConfigBuilder<T, T> Root<T>()
{
return null;
}
}
public interface IConfigBuilder<P, T>
{
IConfigBuilder<T, C> Join<C>( Expression<Func<T, C>> expression );
IConfigBuilder<???, P> Up(); // Откуда взять тип пред- предыдущего узла?
}
Непонятно как запоминать в IConfigBuilder'е типы всех ранее использованных узлов. То есть как объявлять метод Up()? Тут вспоминаются списки типов по Александреску. Мржет можно что-то подобное сделать в дотнете?
Спасибо.