使用 IoC 验证接口

发布于 2024-08-12 06:27:01 字数 794 浏览 7 评论 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;

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

I have a domain model that uses IoC with Microsoft Unity.
For the validation I use VAB and I decorate the interface, not the entity.
The code the following:

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);
 }

}

If I decorate directly the class with the VAB attributes, the validation works. If I use the validation only in the interface, it doesn't.
This is how we render a new instance:

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

The code works if the validation attributes are also in the class, otherwise it doesn't.
Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十秒萌定你 2024-08-19 06:27:01

正确的实现是:

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

为了做到这一点,我的接口 IValidable 已变为 IValidable,这样

interface IJob : IValidable<IJob> {  }

我将能够针对接口进行验证。所以我将回收这个接口来验证 Dto!

:D

The correct implementation will be:

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

In order to do that, my interface IValidable has became IValidable where

interface IJob : IValidable<IJob> {  }

In this way I will be able to validate against the interface. So I will recycle this interface to validate also the Dto!

:D

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文