سؤال

وكيف يمكنني حقن قيمة إدخال appSettings (من app.config أو الملف web.config) إلى الخدمة باستخدام الحاويات وندسور؟ إذا أردت أن حقن قيمة الممتلكات وندسور في الخدمة، وأود أن تفعل شيئا من هذا القبيل:

<properties>
    <importantIntegerProperty>666</importantIntegerProperty>
</properties>
<component
    id="myComponent"
    service="MyApp.IService, MyApp"
    type="MyApp.Service, MyApp"
    >
    <parameters>
        <importantInteger>#{importantIntegerProperty}</importantInteger>
    </parameters>
</component>

ولكن ما أود حقا القيام به هو اتخاذ القيمة التي يمثلها #{importantIntegerProperty} من إعدادات التطبيق المتغيرة التي قد تكون محددة مثل هذا:

<appSettings>
    <add key="importantInteger" value="666"/>
</appSettings>

تعديل: للتوضيح. وأنا أدرك أن هذه ليست أصلا ممكن مع وندسور و ديفيد هايدن تشير المقالة أن sliderhouserules لهو في الواقع عن بلده (ديفيد هايدن) اللجنة الاولمبية الدولية للحاويات، وليس وندسور.

وأنا بالتأكيد لم يكن الشخص الاول لديك هذه المشكلة وذلك ما أود أن أعرفه هو كيف أن الآخرين حل هذه القضية؟

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

المحلول

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

http://windsorappcfgprops.codeplex.com/

وأنا في الأصل كتب هذا الرمز قبل بعض الوقت حتى أنها تقوم على وندسور 1.0.3 - نعم، استغرق مني <م> أن طويلة للالتفاف على نشر نتيجة

والرمز يسمح لك أن يكون هذا في app.config (أو الملف web.config، ومن الواضح):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="theAnswer" value="42"/>
  </appSettings>
</configuration>

... والوصول إليه من ملف التكوين XML وندسور الخاصة بك مثل هذا:

<?xml version="1.0" encoding="utf-8" ?>
<castle>
  <components>
    <component
      id="answerProvider"
      service="Acme.IAnswerProvider, Acme"
      type="Acme.AnswerProvider, Acme"
      >
      <parameters>
        <theAnswer>#{AppSetting.theAnswer}</theAnswer>
      </parameters>
    </component>
  </components>
</castle>

وهناك على سبيل المثال العمل في الحل.

نصائح أخرى

كتب آخر عن حالة مماثل ل قبل شهرين. ويستخدم SubDependencyResolver لحقن المعلمات المناسبة. في الحالة الخاصة بك، يمكنك فقط تغيير DynamicConfigurationSettings لConfigurationManager.

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