Дополнительные ресурсы в Spring.Net

Как опционально включить файлы конфигурации Spring? Я думаю о чем-то похожем на это:

  <spring>
    <context>
      <resource uri="file:///Objects/RequiredObjects.xml" />
      <resource uri="file:///Objects/OptionalObjects.xml" required="false" />
    </context>

Таким образом, я мог бы предоставить разработчикам возможность переопределить некоторые части конфигурации (например, для локального улучшения скорости или автоматизации во время запуска приложения), не затрагивая app.config и проблему, связанную с тем, что разработчик может зарегистрировать свой измененный файл, когда это на самом деле не его намерение. изменить конфиг для всех.


person Beachwalker    schedule 28.08.2014    source источник


Ответы (1)


Не так просто, как в AutoFac (потому что там уже есть встроенный способ), но можно добиться чего-то подобного с помощью небольшого кода:

using System.IO;
using System.Xml;

using Spring.Core.IO;

    public class OptionalFileSystemResource : FileSystemResource
    {
        public OptionalFileSystemResource(string uri)
            : base(uri)
        {
        }

        public override Stream InputStream
        {
            get
            {
                if (System.IO.File.Exists(this.Uri.LocalPath))
                {
                    return base.InputStream;
                }

                return CreateEmptyStream();
            }
        }

        private static Stream CreateEmptyStream()
        {
            var xml = new XmlDocument();
            xml.LoadXml("<objects />");
            var stream = new MemoryStream();
            xml.Save(stream);
            stream.Position = 0;

            return stream;
        }
    }

Зарегистрируйте обработчик раздела:

<sectionGroup name="spring">
     ...
      <section name="resourceHandlers" type="Spring.Context.Support.ResourceHandlersSectionHandler, Spring.Core"/>
     ...
</sectionGroup>

...

<spring>
  <resourceHandlers>
    <handler protocol="optionalfile" type="MyCoolStuff.OptionalFileSystemResource, MyCoolStuff" />
  </resourceHandlers>

  ...

<context>
  <resource uri="file://Config/MyMandatoryFile.xml" />
  <resource uri="optionalfile://Config/MyOptionalFile.xml" />
  ...

Дополнительную информацию о ресурсах и обработчиках ресурсов можно найти в документации Spring.Net. .

person Beachwalker    schedule 28.08.2014