使用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;
代码工作如果验证属性也都在类,否则就没有。 为什么?
答
正确的实施将是:
ValidationFactory.CreateValidator<IJob>().Validate(job);
为了做到这一点,我的接口IValidable已成为IValidable其中
interface IJob : IValidable<IJob> { }
以这种方式,我将能够验证接口。所以我会回收这个界面来验证Dto!
:D