0

1 つのエンティティに CustomValidation を使用しており、それにリポジトリを挿入したいと考えています。検証方法は静的でなければなりません。サービスの場所以外の静的コンテキストにオブジェクトを挿入する方法はありますか?

これが私のメタデータです:

[MetadataTypeAttribute(typeof(BillPosition.BillPositionsMetadata))]
[CustomValidation(typeof(BillPositionValidator), "ValidateBillPositionsCount")]
public partial class BillPosition
{
    internal sealed class BillPositionsMetadata
    {
        private BillPositionsMetadata() { }

        public int BillId { get; set; }
    }
}

バリデータコードは次のとおりです。

public class BillValidator
{
    [Inject]
    public static IRepository Repository { get; set; }

    public static ValidationResult ValidateBillPositionsCount(BillPosition bill, ValidationContext context)
    {
        ValidationResult result = ValidationResult.Success;

        /* Repository wasn't injected and I get null reference exception */
        var billPositions = Repository.BillPositions.Count(position => position.BillId == bill.BillId);
        if (bill.BillPositions.Count == 0 && billPositions == 0)
        {
            result = new ValidationResult("Invalid positions count", new[] { "BillPositions" });
        }

        return result;
    }
}
4

3 に答える 3

0

カスタムバリデーターに注入する方法はありません。Service Locator または何らかの形式のリフレクションを使用して、バリデーターが実行されているインスタンスのプロパティまたはメソッドにアクセスできます。ValidationContext を介してこのインスタンスにアクセスできます。

http://www.jaltiere.com/index.php/2010/05/04/ninject-with-mvc-and-validationattributes/

于 2013-10-12T21:21:45.393 に答える
0

IoC を呼び出すだけで、依存関係を解決できます。私がUnityを使用しているように。これらの場合、Bootstrapper.Unity.Resolve("NameOfMyDependency") を呼び出します

于 2013-10-12T23:12:17.880 に答える