Непростая задача на generic'и
От: SergASh  
Дата: 29.10.10 08:52
Оценка:
Привет всем!

Есть набор интерфейсов
  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()? Тут вспоминаются списки типов по Александреску. Мржет можно что-то подобное сделать в дотнете?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.