首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ValidationAttribute进行Autofac属性注入

使用ValidationAttribute进行Autofac属性注入
EN

Stack Overflow用户
提问于 2013-04-08 21:11:32
回答 1查看 892关注 0票数 3

我有一个看起来像这样的ValidationAttribute:

代码语言:javascript
复制
public class RegistrationUniqueNameAttribute : ValidationAttribute
{
    public IRepository<User> UserRepository { get; set; }

    public override bool IsValid(object value)
    {
       //use UserRepository here....
    }
}

在我的容器设置中(在app start中)我有这样的设置:

代码语言:javascript
复制
        builder.Register(c => new RegistrationUniqueEmailAttribute
            {
                UserRepository = c.Resolve<IRepository<User>>()
            });

但是,在调试时,UserRepository的值始终为空,因此不会注入该属性。

我的容器设置错误了吗?

我真的不想使用DependencyResolver.Current.GetService<IRepository<User>>(),因为它不是很容易测试……

EN

回答 1

Stack Overflow用户

发布于 2016-02-05 02:46:59

不,Autofac v3不会对ValidationAttribute和朋友做任何特别的事情,Autofac.Mvc会做很多强大的事情,例如,使用过滤器属性。

我间接地用in this answer解决了这个问题,使人们能够写道:

代码语言:javascript
复制
class MyModel 
{
    ...
    [Required, StringLength(42)]
    [ValidatorService(typeof(MyDiDependentValidator), ErrorMessage = "It's simply unacceptable")]
    public string MyProperty { get; set; }
    ....
}

public class MyDiDependentValidator : Validator<MyModel>
{
    readonly IUnitOfWork _iLoveWrappingStuff;

    public MyDiDependentValidator(IUnitOfWork iLoveWrappingStuff)
    {
        _iLoveWrappingStuff = iLoveWrappingStuff;
    }

    protected override bool IsValid(MyModel instance, object value)
    {
        var attempted = (string)value;
        return _iLoveWrappingStuff.SaysCanHazCheez(instance, attempted);
    }
}

(以及一些辅助类连接到ASP.NET MVC...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15879967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档