كيفية تعريف منشئ افتراضي من التعليمات البرمجية باستخدام StructureMap؟

StackOverflow https://stackoverflow.com/questions/289512

سؤال

وأنا لا يمكن معرفة كيفية تعريف المنشئ الافتراضي (عندما كان موجودا الزائدة) لنوع في StructureMap (الإصدار 2.5) من التعليمات البرمجية.

وأريد الحصول على مثيل خدمة وعاء له لحقن مثيل السياق بيانات مصمم الرسم Linq2SQL فيه.

وكتبت هذا في بلدي الطريقة "الإطلاق ':

ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();

وعند تشغيل التطبيق الخاص بي، وأنا حصلت على هذا الخطأ:

<اقتباس فقرة>   

ورمز StructureMap الاستثناء: 202
  لا مثيل افتراضي المعرفة من أجل PluginFamily MyNamespace.Data.SqlRepository.MyDataContext، MyNamespace.Data، الإصدار = 1.0.0.0، الثقافة = محايدة الأمر PublicKeyToken = فارغة

إذا كنت التعليق خارج كل مصمم الرسم Linq2SQL لدت contructors أن لا حاجة لي، أنه يعمل بشكل جيد.

تحديث: أوه، ونسيت أن أقول إنني لن تستخدم السمة [StructureMap.DefaultConstructor]

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

المحلول

ويمكنك تحديد منشئ مع ConstructedBy (). من فضلك حاول هذا:

ForRequestedType<MyDataContext>().TheDefault.
Is.ConstructedBy(() => new MyDataContext());

وهذا عمل بالنسبة لي.

نصائح أخرى

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

ForRequestedType< MyDataContext >()
            .CacheBy( InstanceScope.PerRequest )
            .TheDefault.Is.OfConcreteType< MyDataContext >()

SelectConstructor< MyDataContext >( () => new MyDataContext());

مع هذا الرمز يمكنك أيضا زيادة ضخ التعاريف واجهات في منشئ MyDataContext مثل هذا

SelectConstructor< MyDataContext >( () => new MyDataContext((IDatabaseFactory)null ));

وتذكر فقط لتحديد نوع ملموس مع StructureMap على سبيل المثال IDatabaseFactory الخاص بك.

وأنا لست متأكدا كيف / إذا كان يمكن القيام به مع واجهة / DSL الداخلي بطلاقة. ولكن يمكنك استخدام سمة، إذا كنت لا فوسيد حول <م> الملوثة نطاقك

والوسم منشئ المفضل لديك مع [DefaultConstructor] التخلف StructureMap إلى greediest منشئ من قبل اتفاقية (منشئ مع معظم المعلمات).

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