2013-04-08 3 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 всегда равно null, поэтому свойство не вводится.

Я установил свой контейнер неправильно?

я действительно предпочел не использовать DependencyResolver.Current.GetService<IRepository<User>>(), как это не так проверяемым ...

+1

ValidationAttributes не создаются Autofac. Сама CLR отвечает за их создание. – Steven

+0

И так .........? – Alex

+0

Этот вопрос подразумевает, что он должен работать? http://stackoverflow.com/questions/12505245/autofac-and-di-for-validationattribute – Alex

ответ

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

(и некоторые вспомогательные классы, включая дополнительные жгуты для ASP.NET MVC ...)

Смежные вопросы