使用IoC验证接口

问题描述:

我有一个使用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; 

代码工作如果验证属性也都在类,否则就没有。 为什么?

好的,我很抱歉,下次我会在发布前谷歌。 这与相关的解决方案的问题:

http://entlib.codeplex.com/Thread/View.aspx?ThreadId=10450

正确的实施将是:

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

为了做到这一点,我的接口IValidable已成为IValidable其中

interface IJob : IValidable<IJob> { } 

以这种方式,我将能够验证接口。所以我会回收这个界面来验证Dto!

:D