0

私はac#アプリケーションを持っています(実際には、WindowsサービスまたはWindowsアプリケーションのように実行されます)。

サービス/アプリケーションの 1 回の実行の構成を XML ファイルから受け取ります。

この XML ファイルは、実際には XML でシリアル化/逆シリアル化された私のデータのみです。それを生成するのは私の他のアプリケーションの1つです。

ビジネス コードを実行する前に、構成ファイルが有効であることを確認したいと思います。

これは、「この文字列は null であってはならない」、「この TimeSpan は XYZ より大きい値でなければならない」などのことを意味します。

そのため、フィールドの内容を参照することによって行うことができる検証のみが行われます (他の何かにアクセスする必要はありません)。

asp.Net MVC で使用したデータ注釈をよく思い出します。asp.net MVC dll 全体をロードすることなく、単純な c# コードに似たものがあればいいのにと思います。

私の他のオプションは、1 つのフィールドが正しくない場合に例外をスローするメソッド「Validate()」を実装することですが、多くif(String.IsNullOrEmpty()のダミーの検証が必要になります。

リフレクションを使用する大きなバリデーターを自分で実装したくありません。小さな構成ファイルの検証だけでは少しやり過ぎです。

これらのファイルを生成するアプリケーションも、同じ検証を使用することに関心を持つ可能性があります。

編集:.Net 3.5を使用する必要があります

4

2 に答える 2

1

この質問は、次の SO 質問の複製のように見えます。

MVC の外部で ASP.Net MVC データ注釈を使用する

編集: ValidationContext が利用できないとあなたが言っているのを見て、Reflection を使用し、プロパティのすべての属性を評価するカスタム コードを作成することをお勧めします。

方法の例については、この質問への回答を参照してください。

ASP.Net MVC 2 コントローラーの TryValidate は、モデル内の List<> 項目を検証しません。

于 2012-11-23T14:42:06.287 に答える
0

IDataErrorInfo を使用しました (同じクラスが wpf アプリケーションで使用されます)。そして、ここで考えられるすべての属性をチェックするカスタム メソッドを使用します。

メソッドは次のとおりです。

 public Boolean IsModelValid()
    {
        Boolean isValid = true;
        PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo p in properties)
        {
            if (!p.CanWrite || !p.CanRead)
            {
                continue;
            }
            if (this[p.Name] != null)
            {
                isValid = false;
            }
        }
        return isValid;
    }
于 2012-11-28T11:43:24.853 に答える