Microsoft Unity で IoC を使用するドメイン モデルがあります。検証には 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;
検証属性もクラスにある場合、コードは機能しますが、そうでない場合は機能しません。なんで?