IoC: Como criar objetos dinamicamente

Tenho um problema para entender como usar a IoC em um cenário em que preciso criar objetos dinamicamente. Vamos supor que eu tenho essas classes:

abstract class Field {
  public Field( ICommandStack commandStack ) {}
}

abstract class Entity {
  public readonly Collection<Field> Fields { get; }
}

class EntityA {
  public EntityA( ICommandStack commandStack ) {
    Fields.Add( new StringField( commandStack ) );
  }
}

class EntitiyB {
  public EntityB( ICommandStack commandStack ) {
    Fields.Add( new IntField( commandStack ) );
    Fields.Add( new IntField( commandStack ) );
    Fields.Add( new IntField( commandStack ) );
  }
}

Então, meu problema é a criação de campos nos construtores. Meus campos precisam de um ICommandStack, mas as entidades não. Eles só recebem o ICommandStack para a criação de seus campos.

Poderia ser mais fácil solicitar os Campos como um argumento no construtor de cada Entidade. Mas o número de campos pode ser> 10 para entidades únicas. Não quero criar construtores com tantos parâmetros.

Então, minha ideia foi entregar uma FieldFactory para os Entites:

class EntityA {
  public EntityA( IFieldFactory fieldFactory ) {
    // create as many fields as needed via the factory
    Fields.Add( fieldFactory.CreateStringField() );
  }
}

Pelo menos o ICommandStack (para Entidade) desnecessário agora se foi. Mas como o FieldFactory cria um campo? Ele só pode injetar o ICommandStack - mas a criação de Fields ainda precisa ser feita por meio da palavra-chave 'new'. Ou devo dar à fábrica uma referência ao meu contêiner DI?

O que é uma boa solução de design aqui?

questionAnswers(2)

yourAnswerToTheQuestion