2016-03-29 26 views
1

こんにちは私はasp.netコアでカスタムDataAnnotation属性を作成しようとしています。ここで私はこれまで持っているものである:私は私のコードでIStoreManager.The問題のインスタンスが必要になりますValidationAttributeでIServiceProviderのインスタンスにアクセスする

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

    } 

    public override bool IsValid(object value) { 

    } 
} 

は、私は属性を使用する場合、私はそれを行う場合は、この方法では、私は、パラメータとしてIStoreManagerを渡す必要があるだろうということです。

コンストラクタインジェクションを使用せずにIServiceProviderのインスタンスにアクセスしてIStoreManagerの依存関係を取得する方法はありますか?

+0

私は確かではないが、私はあなたが '[FromServices]'それが直接注入ではなく、コンストラクタを介して持つようにしてプロパティに注釈をつけることができると思う:あなたは他の仮想isValidメソッド、このような何かをオーバーライドする必要があります。しかし、これはコントローラーでしか動作しないのではないかと疑います(なぜ私は答えとして投稿していないのですか?自分でテストする時間はありません)。それを試す価値がある... –

答えて

2

私も同様の質問で答えを見つけることができませんでしたが、私はそれを理解しました。

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; 
    } 
} 
関連する問題