Ho un grosso oggetto:
class BigObject{
    public int Id {get;set;}
    public string FieldA {get;set;}
    // ...
    public string FieldZ {get;set;}
}
e un oggetto specializzato, simile a DTO:
class SmallObject{
    public int Id {get;set;}
    public EnumType Type {get;set;}
    public string FieldC {get;set;}
    public string FieldN {get;set;}
}
Personalmente trovo un concetto di casting esplicito di BigObject in SmallObject - sapendo che si tratta di un'operazione a perdita di dati a senso unico, molto intuitiva e leggibile:
var small = (SmallObject) bigOne;
passSmallObjectToSomeone(small);
Viene implementato utilizzando l'operatore esplicito:
public static explicit operator SmallObject(BigObject big){
    return new SmallObject{
        Id = big.Id,
        FieldC = big.FieldC,
        FieldN = big.FieldN,
        EnumType = MyEnum.BigObjectSpecific
    };
}
 Ora, potrei creare una classe   SmallObjectFactory    con il metodo   FromBigObject(BigObject big)   , che farebbe la stessa cosa, aggiungerla all'iniezione delle dipendenze e chiamarla quando necessario ... ma a me sembra ancora più complicata e superflua. 
 PS Non sono sicuro che sia pertinente, ma ci sarà   OtherBigObject    che sarà anche in grado di essere convertito in   SmallObject   , impostando% diversoEnumType.