Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何使InjectAttribute与IValidatableObject一起工作_Asp.net Mvc 3_Ninject - Fatal编程技术网

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