2013-04-08 95 views
3

我有一個ValidationAttribute,看起來像這樣:Autofac財產注射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的值始終爲空,所以屬性沒有被注入。

我把我的容器設置錯了嗎?

我真的寧可不要使用DependencyResolver.Current.GetService<IRepository<User>>(),因爲這是沒有檢驗的......

+1

ValidationAttributes不受Autofac創建。 CLR本身負責創建它們。 – Steven 2013-04-08 13:46:06

+0

等.........? – Alex 2013-04-08 14:21:36

+0

這個問題意味着它應該工作? http://stackoverflow.com/questions/12505245/autofac-and-di-for-validationattribute – Alex 2013-04-08 14:44:24

回答

0

沒有,Autofac V3並沒有做特殊的事情ValidationAttribute和朋友[Autofac.Mvc做大量的強大的東西如,帶過濾器屬性]。

我間接in this answer解決了這個問題,使一個寫:

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

(和一些輔助類INC佈線ASP.NET MVC ...)