【问题标题】:Validate interface using IoC使用 IoC 验证接口
【发布时间】:2009-11-27 17:43:38
【问题描述】:

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

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

【问题讨论】:

标签: .net inversion-of-control validation-application-bl


【解决方案1】:

正确的实现是:

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

为了做到这一点,我的接口 IValidable 变成了 IValidable where

interface IJob : IValidable<IJob> {  }

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

:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多