2010-10-17 8 views
5

Entonces, tengo un pequeño problema aquí.Contratos de código: ContractClassFor cuando se trata de una clase abstracta genérica?

Supongamos que tengo:

public class Repository<TEntity> 
    where TEntity : class 
{ 
    public abstract void Add(TEntity entity); 

    // ...and so on... 
} 

Y ahora quiero definir una clase de contrato, así:

public class RepositoryContracts<TEntity> : Repository<TEntity> 
    where TEntity : class 
{ 
    public void Add(TEntity entity) 
    { 
     Contract.Requires(entity != null); 
    } 

    // ...etc... 
} 

Ahora, tendría que marcar estas clases con ContractClassAttribute y ContractClassForAttribute. siendo un problema, esto no funcionará:

[ContractClassFor(typeof(Repository<TEntity>))] // what is TEntity?! error! 

Por lo tanto, la cuestión se reduce a: ¿Cómo se enlazan estas dos clases juntos utilizando esos atributos, cuando están genérico?

Respuesta

5

Resulta que este es un duplicado de this question, un poco.

El tipo de sintaxis (Repository <>) no pareció funcionar para mí, pero resulta que typeof (Repository <,>) hace el truco, ya que hay dos parámetros de tipo.

Cerrando la pregunta y agregando un comentario al the previous one.

+0

Estoy teniendo el mismo problema, eliminando el 'TEntity' genérico solucionado pero cuando' implemento' esta 'interfaz' en alguna otra' clase', se queja de que 'clase' o' interfaz' no implementa métodos IRepository . Algunas ideas ? –

Cuestiones relacionadas