У меня есть следующие два класса:Как я могу зарегистрировать фабрику общих объектов?
public class KeyedEntity<TEntity>
{
internal KeyedEntity() { }
public Identifier Key { get; set; }
public TEntity Entity { get; set; }
}
public static class KeyedEntity
{
public static KeyedEntity<TEntity> Create<TEntity>(Identifier key, TEntity entity)
{
return new KeyedEntity<TEntity>
{
Key = key,
Entity = entity,
};
}
}
Причина, по которой конструктор internal
и второй класс существует, я хочу, чтобы обеспечить соблюдение более высоко ремонтопригоден KeyedEntity.Create(x, y)
синтаксиса, а не new KeyedEntity<T>{ Key = x, Entity = y }
. (Обратите внимание, что тип выводится с прежним синтаксисом.)
Я хочу сказать AutoFixture, как создать экземпляр KeyedEntity
. Однако метод Register
, по-видимому, позволяет регистрировать только один тип, а не открытый общий тип.
Как я могу зарегистрировать KeyedEntity.Create<TEntity>
как функцию создания для KeyedEntity<TEntity>
?
Почему вы считаете 'KeyedEntity.Create (x, y)' более ремонтопригодным, чем 'new KeyedEntity (x, y)'? –
@Mark: метод factory может возвращать (будущий) подкласс, конструктор никогда не будет. – eFloh
@eFloh А, я на самом деле не считал это, так как я никогда не проектировал свой код для подкласса (* предпочитаю композицию над наследованием *) :) –