ASP.NET MVC - كيفية جعل التعليمات البرمجية تتصرف بشكل مختلف عند التشغيل محليا مقابل QA VS. في الإنتاج

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

سؤال

سؤال: كيفية جعل التعليمات البرمجية تتصرف بشكل مختلف عند تشغيل محليا مقابل في QA VS. في الإنتاج؟

مثال: في تطبيق ASP.NET MVC لدي جهاز تحكم تم إعداده لتقديم إعلامات البريد الإلكتروني. عند الركض محليا على آلة تطوير أريد أن يتم تسليم رسائل البريد الإلكتروني إلى المطور، عندما تكون في قيم لا أريد أي إعلامات بريد إلكتروني تخرج وفي إنتاج أريد الإخطارات الخروج إلى المستفيدين المقصودين

شكرًا

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

المحلول

لديك ثلاثة Web.configs مختلفة وإضافة Appsetting يخبرك أين أنت حتى تتمكن من تحديد ما إذا كان يجب عليك إرسال بريد إلكتروني.

يمكنك أيضا تحديد الثوابت في Web.config باستخدام سمة الجوعية:

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs"
      type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,
      Culture=neutral, PublicKeyToken=b77a5c561934e089"
      compilerOptions="/d:Test"/>
  </compilers>
</system.codedom>

وفي استخدام التعليمات البرمجية الخاصة بك

#if !Test
    SendMail();
#endif

نصائح أخرى

هذا يبدو وكأنه شيء يجب عليك استخدام IOC. أنا عادة استخدام الهيكلية مما سيسمح لي بإعداد ملفات تعريف مختلفة. ثم كل ما عليك فعله هو أن يكون لديك مفتاح تشغيل على الويب الذي تم تكوينه لتعيين ملف تعريف البيان المناسب.

على سبيل المثال، في Instructuremap، يمكنك القيام بما يلي:

ObjectFactory.Initialize( x => {
    x.CreateProfile( "Development", p =>
    {
        p.Type<IEmailProvider>().Is.OfConcreteType<DeveloperEmailProvider>();
    } );

    x.CreateProfile( "QA", p =>
    {
        p.Type<IEmailProvider>().Is.OfConcreteType<NullEmailProvider>();
    } );

    x.CreateProfile( "Production", p =>
    {
        p.Type<IEmailProvider>().Is.OfConcreteType<ProductionEmailProvider>();
    } );

} );

ObjectFactory.Profile = ConfigurationSettings.AppSettings["Profile"];

بالنسبة للمشاريع الخفيفة، أنا فقط استخدم قيمة Appsetting، ثم لجميع رسائل البريد الإلكتروني، قم بتمرير عنوان المستلم من خلال الرسالة التالية:

Public Static Mailaddress mailto (سلسلة البريد الإلكتروني السلسلة) {if (boolean.parse (configurationmanager.appsettings ["redirectemails"])) {إرجاع mailaddress جديد (configurationmanager.appsettings ["debugmailbox"])؛ } إرجاع MailAddress الجديد (البريد الإلكتروني)؛ }

تستخدم مشاريعنا الأكبر من البرامج النصية لبناء NANT، والتي تستخدم ملفات تكوين القوالب لإنشاء تكوين مختلف لأهداف البناء المختلفة (حتى يكون لديك ملف Web.config.template، الذي يتم دمجه إما محلي .properties أو اختبار. التطبيق أو الإفراج عنه. خصائص ملف XML الذي يحتوي على المتغيرات ذات الصلة).

وأود أن تكوين Web.config بشكل مختلف بالنسبة لبيئات كيفية إرسال System.net.mail رسائل البريد الإلكتروني. ألق نظرة على Scott Gu's مشاركة مدونة حوله. ل التطور, ، أود أن أسقط رسائل البريد الإلكتروني على الخادم في مكان ما. ل قيم, ، اذهب لا ترسل أي شيء في أي مكان، ول إنتاج لقد قمت بتكوينها لاستخدام خادم SMTP العادي.

أعتقد أن الإجابة IOC هي حل عام جيد. للحصول على حالة محددة من رسائل البريد الإلكتروني التي يتم إرسالها مباشرة إلى خادم SMTP، يمكنك بدلا من ذلك استخدام محلول التكوين هنا: كيف يمكنني حفظ بريد إلكتروني بدلا من إرسال عند استخدام SMTPClient؟. وبعد حل التكوين سريع ورخيص، خاصة إذا كان فريق DEV غير كبير على IOC.

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

فعلت هذا في مشروع حديثة. حلاي متورط إلى حد ما، ولكن باختصار هناك مفاتيح Web.config التي تتحكم في هذا: EmailTestMode والبراريل الإلكتروني. إذا تم تشغيل البريد الإلكتروني، يتم إنشاء الرسائل ولكن إرسالها إلى عنوان محدد بدلا من المستلم المقصود. إذا تم إيقاف تشغيل البريد الإلكتروني، يتم تسجيل الرسائل ولكن لم يتم إرسالها.

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

مثل الآخرين قالوا، واستخدام مختلفة إعدادات التطبيق في web.config الخاص بك. يمكن أن يستخدم رمز وقت التشغيل الخاص بك الإصدار الصحيح من الإعدادات الخاصة بك.

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

يمكنني استخدام برنامج التحكم في الإصدار للقيام بذلك بالنسبة لي. في الأساس لدي ملفات متعددة Web.config لكل بيئات بي (ديف، اختبار، ضمان الجودة، همز). الآن في برنامج التحكم في الإصدار، يمكنني وضع علامة على جميع الملفات للبيئة الصحيحة. لذلك عندما أحتاج إلى إنشاء QA EvnVironment أحصل على جميع الملفات الموسومة "QA" وهلم جرا.

الطريقة التي نقوم بها هي أن يكون لديك مفتاحين التكوين في جهازنا.

ProductionServers = "prod_server"
testservers = "local_machine | test_server"

ثم لدينا وظيفة تختبر اسم الجهاز (system.environment.machinename) مقابل هذه القيم. بهذه الطريقة لا يتعين علينا تغيير أي تكوينات على الخوادم وعندما نريد أن نشير في برز بدلا من الاختبار، نغيرنا فقط Machine.config.

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