Один раздел, много реализаций в C # - PullRequest
1 голос
/ 23 июня 2009

Я хотел бы скачать файл, разобрать его и поместить куда-нибудь. Итак, у меня есть несколько разделов, обрисованных в общих чертах ниже, и я хотел бы использовать приведенные ниже директивы, чтобы указать, что должна делать программа. Мне нравится эта форма конфигурации, и я хотел бы выяснить, как заставить это работать как-то, но я знаю, что она не будет работать именно так, потому что я не могу использовать один и тот же раздел более одного раза. Я просто надеюсь, что кто-то может высказать некоторые идеи о том, как заставить эту идею работать.

 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <sectionGroup name="processor">
      <sectionGroup name="process">
        <!-- AVAILABLE TRANSPORTS -->
        <section name="ftp_transport" type="someFTPClass1, someAssembly"/>
        <section name="web_transport" type="someHTTPClass2, someAssembly"/>

        <!-- AVAILABLE PARSERS -->
        <section name="fixed_line_parser" type="someParserClass3, someAssembly" />
        <section name="regular_expression_parser" type="someParserClass4, someAssembly" />

        <!-- AVAILABLE LOADERS -->
        <section name="database_loader" type="someDbLoaderClass5, someAssembly" />
      </sectionGroup>
    </sectionGroup>
  </configSections>

, а затем что-то вроде этого для запуска программы:

<processor>
   <process name="File1">
    <ftp_transport>...</ftp_transport>
    <fixed_line_parser>...</fixed_line_parser>
    <database_loader>...</database_loader>
   </process>

   <process name="File2">
    <web_transport>...</web_transport>
    <fixed_line_parser>...</fixed_line_parser>
    <database_loader>...</database_loader>
   </process>
</processing>

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

Похоже, вы в основном создаете контейнер инверсии управления (IoC) Взгляните на некоторые из них для .Net здесь

0 голосов
/ 24 ноября 2009

Я хотел сделать что-то подобное. После нескольких часов поиска я нашел этот пример:

http://www.dotneat.net/2007/10/16/StoringACollectionOnYourAppconfigUsingSectionHandlers.aspx

Хорошо работает.

0 голосов
/ 23 июня 2009

Проблема в том, что у вас есть SectionGroup, вложенная в SectionGroup? Измените внешние теги SectionGroup на SectionGroups вместо SectionGroup.

<!-- SECTION DECLARATION -->
 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <sectionGroups name="processor">
      <sectionGroup name="process">
        <!-- AVAILABLE TRANSPORTS -->
        <section name="ftp_transport" type="someFTPClass1, someAssembly"/>
        <section name="web_transport" type="someHTTPClass2, someAssembly"/>

        <!-- AVAILABLE PARSERS -->
        <section name="fixed_line_parser" type="someParserClass3, someAssembly" />
        <section name="regular_expression_parser" type="someParserClass4, someAssembly" />

        <!-- AVAILABLE LOADERS -->
        <section name="database_loader" type="someDbLoaderClass5, someAssembly" />
      </sectionGroup>
    </sectionGroups>
  </configSections>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...