3

次のような ValidationAttribute があります。

public class RegistrationUniqueNameAttribute : ValidationAttribute
{
    public IRepository<User> UserRepository { get; set; }

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

私のコンテナのセットアップ(アプリの開始時)には、これがあります:

        builder.Register(c => new RegistrationUniqueEmailAttribute
            {
                UserRepository = c.Resolve<IRepository<User>>()
            });

ただし、デバッグ時には UserRepository の値は常に null であるため、プロパティは挿入されません。

コンテナの設定が間違っていませんか?

これはテスト可能ではないため、使用する必要DependencyResolver.Current.GetService<IRepository<User>>()はありません...

4

1 に答える 1

0

いいえ、Autofac v3 は と の友だちに対して特別なことは何もしませんValidationAttribute[Autofac.Mvcフィルター属性など、多くの強力なことを行います]。

この回答で間接的に問題を解決し、次のように書くことができました。

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 への配線を含むいくつかのヘルパー クラス...)

于 2016-02-04T18:46:59.220 に答える