Asp.net mvc 3 如何使InjectAttribute与IValidatableObject一起工作
我有这个模型Asp.net mvc 3 如何使InjectAttribute与IValidatableObject一起工作,asp.net-mvc-3,ninject,Asp.net Mvc 3,Ninject,我有这个模型 public class CustomerSuscribeViewModel : IValidatableObject { [DataMember(IsRequired = true)] [DataType(DataType.Text)] public string Name { get; set; } public string SurName { get; set; } [DataMember(IsRequired = true)]
public class CustomerSuscribeViewModel : IValidatableObject
{
[DataMember(IsRequired = true)]
[DataType(DataType.Text)]
public string Name { get; set; }
public string SurName { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
[DataMember(IsRequired = true)]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Inject]
public IDataUsers DataUsers { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(DataUsers.Get(new UserFilter() {Email = Email}).Any())
{
yield return new ValidationResult(This Email is already used.",new string[]{"Email"});
}
if(ConfirmPassword != Password)
yield return new ValidationResult("Please confirm your apssword", new string[] { "Password", "ConfirmPassword" });
}
}
问题是从未创建成员DataUsers,因此我得到一个NullReferenceException
绑定通过以下方式完成:
Bind<IDataUsers>().To<DataUsers>();
有什么想法吗
编辑:InjectAttribute适用于控制器内的属性
环境:asp.net mvc 3,ninject 2.2可能需要更新?视图模型不是由ninject创建的,因此inject属性被忽略。通常视图模型应该保持简单并且没有依赖性。您可以通过使用ValidationAttributes而不是IValidatableObject来实现 阅读有关验证属性的注入 例子: 下面是如何使用ValidationAttribute实现密码验证与确认密码匹配的示例: 实施: 用法:
视图模型不是由Ninject创建的,因此inject属性被忽略。通常视图模型应该保持简单并且没有依赖性。您可以通过使用ValidationAttributes而不是IValidatableObject来实现 阅读有关验证属性的注入 例子: 下面是如何使用ValidationAttribute实现密码验证与确认密码匹配的示例: 实施: 用法:
可能重复的DataUsers是一个属性而不是字段抱歉我的错误。正在阅读InjectAttribute,您是否正在使用ninject创建CustomerUscribeViewModel对象?正如您在我的操作签名中所看到的,CustomerUscribeViewModel是由.net通过http请求的绑定实例化的。请查看可能的重复数据用户是一个属性而不是字段对不起,我的错误。在阅读InjectAttribute时,您是否正在使用ninject创建CustomerUscribeViewModel对象?正如您在我的操作签名中所看到的,CustomerUscribeViewModel是由.net通过http请求的绑定实例化的。我猜,看看很棒的,完美的!另一个链接中的Darin solution说我的做法是反模式的,但他没有给出其他解决方案。你的看起来很完美!太好了,太好了!另一个链接中的Darin solution说我的做法是反模式的,但他没有给出其他解决方案。你的看起来很完美!
Bind<IDataUsers>().To<DataUsers>();