2009-11-27 72 views
0

我有一個使用IoC和Microsoft Unity的域模型。 對於驗證我使用VAB和我裝飾接口,而不是實體。 代碼如下:使用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); 
} 

} 

如果我直接裝飾與VAB的類屬性,驗證工作。如果我只在界面中使用驗證,它不會。 這就是我們如何使一個新的實例:

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

代碼工作如果驗證屬性也都在類,否則就沒有。 爲什麼?

回答

1

正確的實施將是:

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

爲了做到這一點,我的接口IValidable已成爲IValidable其中

interface IJob : IValidable<IJob> { } 

以這種方式,我將能夠驗證接口。所以我會回收這個界面來驗證Dto!

:D