2016-03-29 9 views
1

'daki bir IServiceProvider örneğine erişme Merhaba asp.net çekirdeğinde özel bir DataAnnotation özniteliği oluşturmaya çalışıyorum. İşte ben bugüne kadar ne var:Bir ValidationAttribute

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 
public class StoreDupplicateAttribute : ValidationAttribute 
{ 
    public StoreDupplicateAttribute(IStoreManager storeManager) 
    { 

    } 

    public override bool IsValid(object value) { 

    } 
} 
Ben IStoreManager.The sorununun bir örneği ben bu şekilde yaparsak ben niteliğini kullandığınızda bir parametre olarak IStoreManager geçmesi gerekir ki benim kodda gerekir

.

IServiceProvider'ın bir örneğine, kurucu enjeksiyonu kullanmadan IStoreManager bağımlılığından yararlanmak için erişmenin bir yolu var mı?

+0

Emin değilim ama birlikte bir özellik açıklama düşünüyorum '[FromServices]' o yapıcısı aracılığıyla yerine doğrudan enjekte olması. Bununla birlikte, bunun sadece kontrolörlerle çalıştığından şüpheleniyorum (bu yüzden onu bir cevap olarak göndermiyorum, kendimi test etmek için zamanım yok). Denemeye değer ... –

cevap

2

Benzer bir soruya da bir cevap bulamadım, ancak sonra bunu anladım. Böyle başka sanal IsValid yöntemi, bir şey geçersiz kılmak gerekir:

public class StoreDupplicateAttribute : ValidationAttribute 
{ 
    public StoreDupplicateAttribute() 
    { 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     IStoreManager storeManager = validationContext.GetService(typeof(IStoreManager)) as IStoreManager; 

     return ValidationResult.Success; 
    } 
} 
İlgili konular