سؤال

لقد قمت بإعداد مشروع MVC الخاص بي لاستخدام التحقق بطلاقة و Windsor Castle وكل شيء يعمل بشكل رائع. أنا أستخدم مصنع مصلحة مخصص لأخذ في الاعتبار أنني أستخدم أيضًا إطار عمل الكيان وأضطر إلى حساب الوكلاء الديناميكيين الذين يتم لفهم حول فصول POCO الخاصة بي. إليكم CastleWindsorValidatorFactory:

public override IValidator CreateInstance( Type validatorType)
{
    if( validatorType.GetGenericArguments()[0].Namespace.Contains( "DynamicProxies" ) )
    {
        validatorType = Type.GetType( String.Format( "{0}.{1}[[{2}]], {3}", validatorType.Namespace, validatorType.Name, validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName, validatorType.Assembly.FullName ) );

    }

    return ResolveType.Of( validatorType ) as IValidator;
}

كل شيء يعمل بشكل جيد عندما يكون المدقق للنموذج أن إجراء وحدة التحكم هو ربط النموذج. إذا لم يكن هناك مصلحة لهذا النموذج المحدد ، فأنا أحصل على خطأ لا يمكنه حل هذا النوع.

ولكن ، لا تحتاج جميع النماذج إلى التحقق. يمكنني كتابة واحدة فارغة ، لكن هذا مجرد رمز عديم الفائدة. هل يجب أن ألتقط الخطأ وأتجاهله عندما أحاول حل المدقق؟ هل هناك شيء مدمج في القلعة من شأنه أن يساعدني في هذا؟ ماذا علي أن أفعل؟

هل كانت مفيدة؟

المحلول

ما انتهى بي الأمر مع هذا هو اللحاق بالمكون extfoundException داخل جهاز التحقق الخاص بي وإعادة الفارغ من هذا:

public class CastleWindsorValidatorFactory : ValidatorFactoryBase
{
    public override IValidator CreateInstance( Type validatorType)
    {
        if( validatorType.GetGenericArguments()[0].Namespace.Contains( "DynamicProxies" ) )
        {
            validatorType = Type.GetType( String.Format( "{0}.{1}[[{2}]], {3}", validatorType.Namespace, validatorType.Name, validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName, validatorType.Assembly.FullName ) );

        }

        try
        {
            return ResolveType.Of( validatorType ) as IValidator;
        }
        catch( ComponentNotFoundException )
        {
            return null;
        }
    }
}

لست متأكدًا تمامًا من أنه أفضل شيء يجب فعله ، لكن يبدو أنه يعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top