سؤال

وأنا أحاول أن أجعل exceptionhandling على dependend السياق. لدي فئة مصنع بناء exceptionhandlers. يجب أن تبنى على معالج من نوع اخر استثناء القيت. تكوين structuremap الطريقة الكلاسيكية، ويعمل بها ما يرام. محاولة استخدام الإنشاء والتطوير المشروط، قانون بلدي فشل، وأنا لا يمكن أن نرى لماذا ؟! ماذا ينقصني؟ أين هو خطأي كبير؟

والتحيات،  -jan

وقانون العمل:

ObjectFactory.Initialize(x => 
    x.ForRequestedType<IExceptionHandler>()
        .TheDefault.Is.OfConcreteType<MyExceptionHandler>());

ورمز غير العمل

ObjectFactory.Initialize(x =>
    x.ForRequestedType<IExceptionHandler>().TheDefault.Is.Conditional(o =>
        o.TheDefault.Is.OfConcreteType(MyExceptionHandler)));

والحصول على مثيل:

IExceptionHandler handler = ObjectFactory.With("exception").EqualTo(exception).GetInstance<IExceptionHandler>();

وهكذا سأحاول أن تكون أكثر تحديدا:

ولدي BaseExceptionHandler، MyExceptionHandler وراثة من قاعدة وMyException وراثة من System.Exception. الآن، إذا أنا أحاول الحصول على بلدي معالج أحصل على خطأ 202: لا مثيل افتراضي المعرفة من أجل PluginFamily MyException ...
الطبقات تبدو وكأنها هو مبين أدناه ...

public class MyException : System.Exception
{
    public MyException()
    {...}
    ...
}

public class BaseExceptionHandler
{
    public BaseExceptionHandler(Exception exception)
    {...}
    ...
}

public class MyExceptionHandler : BaseExceptionHandler
{
    public MyExceptionHandler(MyException exception) : base(exception)
    {...}
    ...
}
هل كانت مفيدة؟

المحلول

ومشكلتك لها علاقة تسجيل الشرطي شيء. عليها أن تفعل مع الطريقة التي يتم تمرير استثناء. يجب استخدام (parameterName التي سلسلة) في بناء الجملة. مع فقط مع أنواع البدائية (سلسلة، الباحث، الخ). لاستثناء، تريد مع (T سبيل المثال) في بناء الجملة:

IExceptionHandler handler = ObjectFactory.With<Exception>(exception).GetInstance<IExceptionHandler>();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top