سؤال

أنا مبتدئ كاملة إلى ninject

لقد تم سحب وبصرف النظر رمز لشخص آخر و وجدت عدة حالات من nInject وحدات الطبقات التي تستمد من Ninject.وحدات.وحدة و طريقة الحمل التي تحتوي على أكثر من التعليمات البرمجية الخاصة بهم.

هذه تسمى الفصول الدراسية من خلال التذرع LoadModule طريقة مثيل StandardKernel وتمريرها مثيل من وحدة الصف.

ربما أنا في عداد المفقودين شيء واضح هنا ، ولكن ما هي الفائدة من هذا أكثر من مجرد إنشاء القديم عادي فئة استدعاء الأسلوب أو ربما فئة ثابتة مع ثابت الأسلوب ؟

 

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

المحلول

على Ninject وحدات هي الأدوات المستخدمة لتسجيل أنواع مختلفة مع اللجنة الأولمبية الدولية الحاوية.ميزة هي أن هذه الوحدات ثم يوضع في فصول خاصة بهم.هذا يسمح لك لوضع مستويات مختلفة/الخدمات في وحدات خاصة بهم.

// some method early in your app's life cycle
public Kernel BuildKernel()
{
    var modules = new INinjectModule[] 
    {
        new LinqToSqlDataContextModule(), // just my L2S binding
        new WebModule(),
        new EventRegistrationModule()
    };
    return new StandardKernel(modules);
}

// in LinqToSqlDataContextModule.cs
public class LinqToSqlDataContextModule : NinjectModule
{
    public override void Load()
    {
        Bind<IRepository>().To<LinqToSqlRepository>();
    }
}

وجود وحدات متعددة يسمح الفصل بين المخاوف ، حتى داخل حاوية اللجنة الأولمبية الدولية.

باقي لك سؤال يبدو أكثر عن اللجنة الاولمبية الدولية و دي ككل ، وليس فقط Ninject.نعم ، يمكنك استخدام ثابت تكوين الأشياء أن تفعل كل شيء تقريبا أن الحاويات اللجنة الاولمبية الدولية لا.اللجنة الاولمبية الدولية حاويات تصبح جميلة حقا عندما يكون لديك تدرجات متعددة من التبعيات.

public interface IInterfaceA {}
public interface IInterfaceB {}
public interface IInterfaceC {}

public class ClassA : IInterfaceA {}

public class ClassB : IInterfaceB
{
    public ClassB(IInterfaceA a){}
}

public class ClassC : IInterfaceC
{
    public ClassC(IInterfaceB b){}
}

بناء ClassC هو الألم عند هذه النقطة ، مع العديد من أعماق الواجهات.انها أسهل بكثير من مجرد طرح النواة على IInterfaceC.

var newc = ApplicationScope.Kernel.Get<IInterfaceC>();

نصائح أخرى

ربما أنا في عداد المفقودين شيء واضح هنا, ولكن ما هي الفائدة من هذا أكثر من مجرد إنشاء القديم عادي الدرجة و استدعاء الأسلوب ، أو ربما ثابت الدرجة مع ثابت الأسلوب ؟

نعم ، يمكنك فقط استدعاء مجموعة من Bind<X>().To<Z>() البيانات إلى إعداد الارتباطات ، من دون وحدة.

الفرق هو أنه إذا كنت وضعت هذه البيانات في وحدة نمطية ثم:

  • IKernel.Load(IEnumerable<Assembly>) حيوي يمكن اكتشاف هذه الوحدات من خلال انعكاس وتحميلها.
  • الارتباطات منطقيا تجميعها معا تحت اسم ؛ يمكنك استخدام هذا الاسم إلى تفريغ لهم مرة أخرى مع IKernel.Unload(string)

ربما أنا في عداد المفقودين شيء واضح هنا ، ولكن ما هي الفائدة من هذا أكثر من مجرد إنشاء القديم عادي فئة استدعاء الأسلوب أو ربما فئة ثابتة مع ثابت الأسلوب ؟

بالنسبة لنا هو القدرة على إضافة الاختبارات في وقت لاحق بسهولة جدا.فقط تجاوز عدد قليل من الارتباطات مع mockobjects وفويلا.....في التعليمات البرمجية القديمة دون DI أن السلكية "كل شيء" ، فمن شبه المستحيل أن تبدأ إدراج اختبار الحالات دون بعض إعادة صياغة.مع دي في مكان طالما كانت تستخدم بشكل صحيح حيث DI السلكية كل شيء ، هو بسيط جدا أن تفعل ذلك حتى على التعليمات البرمجية القديمة التي قد تكون قبيحة جدا.

في كثير من دي أطر يمكنك استخدام إنتاج وحدة لاختبار الخاص بك مع نموذج اختبار يتجاوز محددة الارتباطات مع mockobjects(ترك بقية الأسلاك في المكان).قد تكون هذه نظام الاختبارات أكثر من وحدة الاختبارات ، ولكن أنا أميل إلى تفضيل أعلى مستوى الاختبارات متوسط المطور كما الاختبارات التكامل بين الطبقات ومن وثائق كبيرة شخص ينضم إلى المشروع يمكن أن ترى كل ميزة في العمل(بدلا من مجرد أجزاء من ميزة) دون الحاجة إلى إعداد نظام كامل).

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