2009-11-27 11 views
0

J'ai un modèle de domaine qui utilise IoC avec Microsoft Unity. Pour la validation, j'utilise VAB et je décore l'interface, pas l'entité. Le code qui suit:Validez l'interface avec IoC

interface IJob : IValidable 
{ 
[NotNullValidator] 
string Name { get; set; } 
} 

interface IValidable 
{ 
bool IsValid { get; } 
void ValidationResults Validate(); 
} 

class Job : IJob 
{ 
string Name { get; set; } 

public virtual bool IsValid 
{ 
    get { try 
     { 
      return Validate().IsValid; 
     } 
     catch 
     { 
      return false; 
     } } 
} 

public ValidationResults Validate() 
{ 
    return Validation.Validate(this); 
} 

} 

Si je décore directement la classe avec les attributs de VAB, la validation fonctionne. Si je n'utilise la validation que dans l'interface, ce n'est pas le cas. Voilà comment nous rendions une nouvelle instance:

ioC.RegisterType<IJob, Job>(); 
IJob job = ioC.Resolve<IJob>(); 
return job.IsValid; 

Le code fonctionne si les attributs de validation sont également dans la classe, sinon il ne fonctionne pas. Pourquoi?

Répondre

1

La mise en œuvre correcte sera:

ValidationFactory.CreateValidator<IJob>().Validate(job); 

Pour ce faire, mon interface IValidable est devenu IValidable où

interface IJob : IValidable<IJob> { } 

De cette façon, je serai en mesure de valider par rapport à l'interface. Je vais donc recycler cette interface pour valider aussi le Dto!

: D