0

我有一个使用 IoC 和 Microsoft Unity 的域模型。对于验证,我使用 VAB 并装饰界面,而不是实体。代码如下:

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;

如果验证属性也在类中,则代码有效,否则无效。为什么?

4

1 回答 1

1

正确的实现将是:

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

为了做到这一点,我的接口 IValidable 变成了 IValidable 在哪里

interface IJob : IValidable<IJob> {  }

通过这种方式,我将能够针对接口进行验证。所以我将回收这个接口来验证Dto!

:D

于 2009-11-27T19:06:34.180 回答